При каких условиях блокировка winsock send () возвращает 0? - PullRequest
1 голос
/ 03 апреля 2012

MSDN говорит следующее: «Вызов send с нулевым параметром len допустим и будет рассматриваться реализациями как успешный. В таких случаях send вернет ноль в качестве допустимого значения. Для сокетов, ориентированных на сообщения, нулевойдлина транспортной дейтаграммы отправлена. "

Мой вопрос: если параметр len НЕ равен нулю, будет ли блокирующая send () возвращать 0 (при условии, что таймаут не установлен)?

Я также искалИнтернет, и обнаружил следующее:

http://tangentsoft.net/wskfaq/articles/bsd-compatibility.html

"Под Winsock функциональность SIGPIPE / EPIPE вообще не существует: send () либо возвратит 0 для нормального разъединения, либо-1 для аварийного отключения ".

Однако, как бы я ни пытался, мне не удалось смоделировать" нормальное отключение ", и поэтому я НЕ мог бы отправить () вернуть 0.

Заранее спасибо.

1 Ответ

0 голосов
/ 03 апреля 2012

«Нормальное» разъединение - это когда получающая сторона вызывает closesocket() на своем конце соединения, чтобы отправить пакет FIN отправляющей стороне.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * При обнаружении, что соединение было отключено изящно, send() обнаруживает, что соединение было корректно разорвано, и возвращает 0.

...