boost::asio server multi-process
I would to make a simple multi process (not thread) server. I've seen the iterative example in which it handles one request at a time. Instead I need to handle more requests(more on less 10) at the same time. In the classic c and c++ examples, I've seen that the server is designed like the following:
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
}
Is it possible to do something like that with boost? I really don't know how obtain the two different socket, because in boost all the function (listen
, bind
, accept
, etc.) return void.
Yes, it's possible to use Boost.Asio to fork a process for each connection. See the BSD Socket API Boost.Asio documentation for the mappings for bind
, listen
, accept
into the relevant Boost.Asio types.
Though, as I pointed out in my comment, I don't feel this design scales well at all. You're better off learning asynchronous design patterns and using the real strengths of the Boost.Asio library. For more information, see the C10K problem.
精彩评论