我正在制作一个服务器,它在连接时生成一个子进程(使用 fork),并在有另一个连接进入时使用管道向这个子进程发送另一个套接字。这个想法是让子进程在 2- 中管理两个连接玩家网络游戏模式。
父子之间的 IPC 管道变量是 pfd[2]。
基本上,在子进程中,我确实recvmsg(pfd[0], &message, MSG_WAITALL)
要等待从父进程传递的第二个套接字。
但是, recvmsg 永远不会被阻塞,并且总是返回 -1。
我已经将 pfd[0] 设置为 BLOCKING ,如下所示:
// set to blocking pipe
int oldfl;
oldfl = fcntl(pfd[0], F_GETFL);
if (oldfl == -1) {
perror("fcntl F_GETFL");
exit(1);
}
fcntl(pfd[0], F_SETFL, oldfl & ~O_NONBLOCK);
如何让孩子在 recvmsg 被阻止?
感谢一百万的任何提示。