使用pause()等待子进程

时间:2014-05-23 09:43:00

标签: c sockets signals

我是网络编程的新手,所以我需要一个建议。我有一个简单的服务器,可同时为3个客户端提供服务。当第四个客户端到达时,它应该等到当前客户端之一结束服务。这是我的代码的一部分

    for(;;) {

      if(nchilds == 3) {
         /* server must wait until one of his children terminate */
         pause();
      }

      if((clientfd = accept(serverfd, (struct sockaddr*)&addr, &addr_len)) == -1) {
         perror("accept");
         continue;
      }

      if((pid = fork()) > 0){ // parent process
         nchilds++;

      }else if(pid == 0){ // child process

         /* for client process this is unnecessary socket, so close it */
         tcpsock_destroy(serverfd);

         if(!serve_client(clientfd)) {
            perror("serve_client");
            return 1;
         }

         /* close the connection with the client */
         tcpsock_destroy(clientfd);
         return 0;

      }else{
         perror("fork");
      }
   }

我想要做的是同时为多达3个客户提供服务。所以我有一个计数器来计算活跃客户的数量。当计数器为3时,服务器必须等待。 我想在服务器进程中使用pause(),并注册到SIGCHLD,这是一个信号处理程序,它将执行nchilds--。这样做是否安全,正确,还是有更好的解决方案?谢谢!

0 个答案:

没有答案