c ++ winsock recv завершает поток вместо возврата кода ошибки при получении 0 данных

Действительное сокетное соединение уже установлено с сервером. Существует простой цикл, предназначенный для продолжения получения данных до тех пор, пока сервер больше не прекращает отправку. Вся документация указывает, что слишком многократное использование recv () должно привести к тому, что он вернет 0 или -1 (в зависимости от ситуации). Вместо этого он убивает поток с помощью некоторого рода IOError (в строке с вызовом recv). Что мне не хватает?

Редактировать: sad это просто струнный поток. Обещаю, это никак не связано с проблемой: D

Другое Редактирование: включено errno.h и проверил коды ошибок, но безрезультатно.

do {
memset(buffer,0,sizeof(buffer));
bytes = recv(s,buffer,sizeof(buffer)-40,0);
sad << buffer;
Sleep(1);
} while (bytes>0);

3

Решение

Возможно, вам также следует проверить errno, так как может быть преждевременное завершение канала связи.

#include <errno.h>
#include <string.h>

do {
memset(buffer,0,sizeof(buffer));
bytes = recv(s,buffer,sizeof(buffer)-40,0);
if (errno)
break;
sad << buffer;
Sleep(1);
} while (bytes>0);

if (errno)
std::cerr << "Premature end of connection: " << strerror(errno) << '\n';
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]