简单的socket接收问题
环境:VS2008 MFC 单文档 Formview
问题:我使用socket连接2台仪器进行tcp通讯,对方做服务器端,我这是客户端。通讯过程中如果对方关掉closesocket(),我这边为什么检测不到?
- C/C++ code
ret = send(m_sock, sdata0, 5, 0); //发送数据 if(ret <= 0) { ret = WSAGetLastError(); TcpError(ret); return; } rrlen = 0; memset(m_tcpRcvData, 0, TCP_READ_DATA_LENGTH); while(rrlen < TCP_READ_DATA_LENGTH) { int rlen = recv(m_sock, m_tcpRcvData + rrlen, TCP_READ_DATA_LENGTH - rrlen, 0); //接收通道数据 if(rlen < 0) break; rrlen += rlen; ret = WSAGetLastError(); if(ret < 0) { TcpError(ret); return; } }服务端关掉socket后,我这里一直在while循环里阻塞,接收到的数据=0,WSAGetLastError也为0。但感觉如果对方关闭了 的话,应该接收出错才是吧,为什么没有报错呢?
[解决办法]
可以修改一下:
while(rrlen < TCP_READ_DATA_LENGTH)
{
int rlen = recv(m_sock, m_tcpRcvData + rrlen, TCP_READ_DATA_LENGTH - rrlen, 0); //接收通道数据
if(rlen == 0)
break;
//继续写 。。。。。