请问为什么在VC中select()会返回-1
先问一下,在接受UDP数据时,我用的是阻塞的select(),然后一般情况是收到消息包才会解除阻塞,可有时,不知道是因为客户端拔线,还是其他什么原因,select()就不会阻塞,而进入不断的循环中。我想是由于select()返回SOCKET_ERROR,也就是-1,不知道recvfrom()会不会造成这种情况。由于,这种死循环较少出现,所以我也不能确定问题出在哪里,请各位大侠指教!最好还能知道TCP的情况。
//该循环在一个线程中运行
while(1)
{
FD_ZERO(&rset); //rset是局部变量。
rset = readset; //readset是全局变量,会有fd加入或删除。
numfd = select(0, &rset, NULL, NULL, NULL);
if(numfd <= 0)
{
continue; //大多数可能是不断进入这里循环。
}
//UDP message handle
if(FD_ISSET(udpProxyFd, &rset))
{
len = 0;
len = UDP_RecvEpUdpData(buf, UDP_MAX_SIZE);
if(len > 0)
{
H323ProxyUdpMessageHandle(buf, len);
}
else
{
TraceMsgShow("UDP_UdpRecvEpData <= 0 !\n", -1, 1);
}
if(--numfd <= 0)
{
continue;
}
}
}