我想做一个简单的多进程(而不是线程)服务器。我已经看到了迭代示例,它一次处理一个请求。 相反,我需要同时处理更多请求(更多不超过10个)。 在经典的c和c ++示例中,我看到服务器的设计如下:
int listensd, connsd; // listening socket and conection socket
pid_t pid; //process id
listensd=socket(....);
bind(listensd,...);
listen(listensd,...);
for(;;)
{
connsd=accept(listensd,...);
if((pid=fork())==0) //child process
{
close(listensd); //close the listen socket
do_it(connsd); //serve the request
close(connsd); //close the connection socket
exit(0);
}
close(connsd); //the parent closes the connection socket
}
用boost可以做类似的事情吗?我真的不知道如何获得两个不同的套接字,因为在提升所有函数(listen
,bind
,accept
等)中返回void。
答案 0 :(得分:0)
是的,可以使用Boost.Asio来为每个连接分叉进程。有关bind
,listen
,accept
到相关Boost.Asio类型的映射,请参阅BSD Socket API Boost.Asio文档。
尽管如我在评论中指出的那样,我觉得这个设计根本不会很好。您最好学习异步设计模式并使用Boost.Asio库的真正优势。有关详细信息,请参阅C10K problem。