已经与服务器建立了有效的套接字连接。有一个简单的循环旨在继续接收数据,直到服务器停止发送更多数据为止。所有文档都表明,尝试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/

10-11 23:08