开发者

boost::asio server multi-process

开发者 https://www.devze.com 2023-02-13 23:10 出处:网络
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.

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消