3

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

编辑: sad只是一些字符串流。我保证这与问题无关: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);
4

1 回答 1

1

也许您也应该检查一下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';
于 2012-10-10T23:54:02.353 回答