Я не могу найти много документации, чтобы сказать, должно ли это произойти или нет:
- Какой-то поток открывает сокет TCP (или другого потока)
- Поток 1 запускает блокировку recv()
- Поток 2 вызывает shutdown() в сокете с помощью SHUT_RDWR (или, я думаю, SHUT_RD)
- Поток 1 теперь «пробуждается» от своего блокирующего вызова и возвращает ноль, как если бы другая сторона закрыла свой сокет.
Такое поведение проявляется в современных системах Linux и FreeBSD. Я не тестировал его с другими.
Комментарий на странице справки Microsoft MSDN здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms740481%28v=vs.85%29.aspx предполагает, что такое поведение является "ответственным" в Windows; в нем также говорится, что это «в настоящее время не так», но это может быть устаревшим.
Это поведение указано где-нибудь? Могу ли я на это положиться?