已经与服务器建立了有效的套接字连接。有一个简单的循环旨在继续接收数据,直到服务器停止发送更多数据为止。所有文档都表明,尝试recv()太多次只会导致它返回0或-1(取决于情况)。相反,它使用某种IOError(与recv调用相同)杀死线程。我想念什么?
编辑:sad
只是一些stringstream。我保证与问题无关:D
另一个编辑:包括errno.h
并检查errno代码,但无济于事。
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';
关于c++ - C++ Winsock Recv接收0数据时终止线程,而不返回错误代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12830174/