我是网络编程的新手,所以我需要一个建议。我有一个简单的服务器,可同时为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--
。这样做是否安全,正确,还是有更好的解决方案?谢谢!