//接受远程服务器并转发到客户端
if(FD_ISSET(it->second.sockSrv, &Fd_Read))
{
ZeroMemory(RecvBuf,sizeof(RecvBuf));
nRecv = recv(it->second.sockSrv, RecvBuf, sizeof(RecvBuf), 0);
if(nRecv < 0)
{
}
else if ( nRecv == 0)
{
int nConde = WSAGetLastError(); if (nConde == 0)
{ 这里是为什么? }
else
{
}
}
msdn说返回0,就是连接断开,select()后 监测io事件后 发现recv() = 0. 我认为是连接关闭,但是实际上这个连接好像并没有关闭。(客户的网络环境,根据调试信息判断的)
if(FD_ISSET(it->second.sockSrv, &Fd_Read))
{
ZeroMemory(RecvBuf,sizeof(RecvBuf));
nRecv = recv(it->second.sockSrv, RecvBuf, sizeof(RecvBuf), 0);
if(nRecv < 0)
{
}
else if ( nRecv == 0)
{
int nConde = WSAGetLastError(); if (nConde == 0)
{ 这里是为什么? }
else
{
}
}
msdn说返回0,就是连接断开,select()后 监测io事件后 发现recv() = 0. 我认为是连接关闭,但是实际上这个连接好像并没有关闭。(客户的网络环境,根据调试信息判断的)
是哦,一个客户度的插件下载,如果recv=0,error=0时关闭连接,结果他的插件就下载失败了:(
对于与客户端通信的套接字,用FD_ISSET 是不起作用的所以加不加都一样
只能靠revc来判断, 是否套接字发生了变化(如:有数据发送给服务端),recv>0说明有数据<=0 叫做扯淡!!!当<=0的时候,那么就必须closesocket,并且FD_CLR 干掉这个套接字,http://topic.csdn.net/u/20120822/13/c6766433-0b3f-4929-9d65-f35ab8be948a.html顺便帮我看看这个帖子,谢谢了
close了 就出现了问题, 但是不close 这个socket就一直在我的检测队列里,导致cpu会比较高。
If no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data received. If the connection has been gracefully closed, the return value is zero.Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.难道你都没有MSDN吗?