Действительное сокетное соединение уже установлено с сервером. Существует простой цикл, предназначенный для продолжения получения данных до тех пор, пока сервер больше не прекращает отправку. Вся документация указывает, что слишком многократное использование 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);
Возможно, вам также следует проверить 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';
Других решений пока нет …