首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

select()返回0,但实际下是有数据过来的

2012-11-10 
select()返回0,但实际上是有数据过来的。C/C++ codeFD_ZERO(&recv_mask)FD_SET(sock, &recv_mask)timeout

select()返回0,但实际上是有数据过来的。

C/C++ code
                FD_ZERO(&recv_mask);    FD_SET(sock, &recv_mask);    timeout.tv_sec = time_out;    //设置超时s    timeout.tv_usec = 0;    ret = select(sock+1, &recv_mask, NULL, NULL, &timeout);// 老是select 不到数据,其实是有数据过来了。    if (ret < 0)            //出错    {            printf("\nselect()<0: Error!\n");        return -1;        //未知错误    }    if (ret == 0)            //如果超时,再读一次    {            ret = select(sock+1, &recv_mask, NULL, NULL, &timeout);        while(ret == 0)        {            ret = select(sock+1, &recv_mask, NULL, NULL, &timeout);        }           }    else          {            处理正确数据。           } 


[解决办法]
每次select前重新设置fdset,因为select会修改它。
[解决办法]
每次select返回后要重新把socket句柄设置到集合中,因为select修改描述符集合.select返回0应该是超时.
这里有使用select的程序源码,解压后找MsgSndSrv目录:
http://download.csdn.net/detail/geoff08zhang/4571358
[解决办法]
建议你贴出完整接收、发送代码;你收不到数据多数情况下是服务端和客户端开的socket类型不匹配造成的

热点排行