0

我正在制作一个服务器,它在连接时生成一个子进程(使用 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 被阻止?

感谢一百万的任何提示。

4

1 回答 1

1

recvmsg()不适用于管道,而仅适用于套接字。当recvmsg()返回 -1 时,您应该检查errno值,它可能是EBADF.

您可以使用unix 套接字而不是管道在进程之间传递文件描述符。

于 2011-03-01T12:36:06.413 回答