0
我正在做一個服務器,它會在連接時產生一個子對象(使用fork),並且當有另一個連接進入時,使用pipe向這個子對象發送另一個套接字。想法是讓子進程管理兩個連接雙人網絡遊戲模式。問題:recvmsg(pfd [0],&message,MSG_WAITALL)總是返回-1而不是被阻止?
家長和孩子之間的IPC管道變量是pfd [2]。
基本上,在子進程中,我做了recvmsg(pfd[0], &message, MSG_WAITALL)
等待第二個socket從父進程傳遞。
但是,recvmsg永遠不會被阻塞,並且總是返回-1。
我已經設置PFD [0]阻斷如下:
// 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被阻塞了孩子?
非常感謝任何提示。
感謝您的回答。我實際上嘗試socketpair而不是管道,它按預期工作。 – 2011-03-01 13:27:24