Я создаю сервер, который порождает дочерний элемент при подключении (используя fork), и использую канал, чтобы отправить другой сокет этому дочернему элементу, когда подключается другое подключение. Идея состоит в том, чтобы позволить дочернему процессу управлять двумя подключениями в режим сетевой игры для 2 игроков.
Переменная 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?
Спасибо миллион за любой намек.