接続時に (フォークを使用して) 子を生成し、別の接続が入ってくると、パイプを使用してこの子に別のソケットを送信するサーバーを作成しています。プレーヤー ネットワーク ゲーム モード。
親と子の間の IPC パイプ変数は pfd[2] です。
基本的に、子プロセスではrecvmsg(pfd[0], &message, MSG_WAITALL)
、親プロセスから 2 番目のソケットが渡されるのを待ちます。
ただし、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 でブロックするにはどうすればよいですか?
ヒントをありがとう。