接收0数据时,c winsock recv终止线程,而不返回错误代码

c++ winsock recv terminates thread instead of returning error code when receiving 0 data

已经与服务器建立了有效的套接字连接。有一个简单的循环设计为继续接收数据,直到服务器停止发送更多数据为止。所有文档都表明,尝试recv()太多次只会导致它返回0或-1(取决于情况)。相反,它使用某种IOError(在recv调用的行中)杀死线程。我想念什么?

编辑:sad只是一些字符串流。我保证与问题无关:D

另一个编辑:包括errno.h并检查了errno代码,但无济于事。

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

也许您还应该检查errno,因为通信通道的一端可能过早。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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) << '\
'
;