Winsock recv не работает после выключения - PullRequest
1 голос
/ 24 марта 2012

Я пытаюсь заставить работать простую программу winsock, поэтому Я создаю свой сокет и отправляю свои данные просто отлично. Тогда я использую shutdown(ConnectSocket, SD_SEND), который в соответствии с msdn отключает отправку данных, но не получение? Пример на msdn делает это тоже.

Но после того, как я вызову shutdown, моя функция recv возвращает 0 без получения данных.
Если я закомментирую код выключения, все будет работать как надо.

Я что-то упустил?

Ответы [ 2 ]

3 голосов
/ 24 марта 2012

Нет, это нормально. Другая сторона ответила на ваше отключение выключением. Нулевой возврат от recv указывает на нормальное отключение соединения. Если вы не хотите, чтобы другая сторона отключила свою половину соединения, не выключайте свою.

(Что вы ожидали от другой стороны, когда ее вызов recv вернул ноль?)

0 голосов
/ 02 мая 2013

Если это протокол HTTP, используйте заголовок Соединение , чтобы закрыть соединение или оставить открытым:

Соединение: Закрыть

в этом случае вам не нужно отключать отправку

или

Соединение: поддерживать связь

прием зациклится без отключения отправляющей части соединения

...