如何解决了解多个客户端向服务器发出请求的waitpid和WNOHANG
我目前有一个类似于此伪代码的程序。目的是通过为每个新连接创建一个子代来处理用户输入(简单的rpc程序),从而能够处理多个客户端,从而能够连接到服务器:
int main() {
char *cmd = " ";
while(status="running") {
accept_connection(); // this will block until a new connection is made
int rval;
int pid = fork(); // when a new connection is made,make a child process to handle user commands
if (pid == 0) { // child process
while (strcmp(command_received,"shutdown")) {
receive_message(msg,buffer);
/* processing the command here */
send_message(server_response);
}
exit(0);
}
int res = waitpid(pid,&rval,WNOHANG); // parent waits (non-blocking) for child process to end
if (WEXITSTATUS(rval == 0) {
status="closing";
}
}
printf("server shutting down...");
return 0;
}
我当前遇到的问题是,即使其中一个客户端输入了“ shutdown”命令,父进程也不会检测到它,并且永远不会进入该循环:
if (WEXITSTATUS(rval == 0) {
status="closing";
}
我面临的问题是父级无法立即检测到退出状态,因为它返回到循环的顶部并在accept_connection()处阻塞。
我可以使该设置正常工作吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。