简体   繁体   中英

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 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM