Куда ушел пакет сокета в разветвленном сценарии? - PullRequest
0 голосов
/ 28 октября 2011

Предположим, у меня есть процесс A и процесс B, в котором A действует как TCP-клиент, B действует как TCP-сервер и A подключился к B, файловый дескриптор сокета в A - это fd1 (A), а дескриптором файла в B является fd2, в этот момент процесс A разветвил дочерний процесс с именем C, C также имеет fd1 (C), который указывает на ту же файловую таблицу, что и fd1 (A), теперь B записывает что-то в fd2, и какой процесс, A или C, получит сообщение? Будет ли сообщение доставлено на fd1 (A)? или fd1 (с)? или случайно? Спасибо.

1 Ответ

0 голосов
/ 05 января 2012

Сообщение будет отправлено любому процессу, который его сначала прочитает. Если A выполняет read() или recv(), пока C занята чем-то другим, A получит данные и наоборот. Если и A, и C выполняют read() или recv() одновременно, результат не определен.

...