请问为什么在VC中select()会返回-1

yangzhiwei27 2004-02-19 12:51:21
先问一下,在接受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;
}
}
}






...全文
281 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧