日期:2014-05-16  浏览次数:21070 次

select从不超时。返回1 。FD_ISSET返回1.但无数据。rcv返回值为0
IBM的 AIX 操作系统。。

select从不超时。返回1 。FD_ISSET返回1.但无数据。rcv返回值为0


1   超时 绝对设置了。每次吐一遍日志。。绝对的。

2. 无数据 居然返回了!!!。select返回 1 。。FD_ISSET 返回 1.但是rcv是 0

求大神。。拯救。。真的找不到问题了。。

------解决方案--------------------
select经常会出错的点有如下3点:
1、select函数中的read_fdsr和write_fdsr,其值在调用完select之后会被函数改写,所以下次再调select需要重新赋值
2、第1个参数,为最大socket fd + 1
3、出错ret<0,超时ret=0,如果出错需要判断errno是否为EINTR(是否被未知信号中断过)。

对于linux系统,对于recv函数如果返回0,表示接收数据时,网络中断,这个时候会有SIGPIPE信号产生。所以可以写个信号处理函数,看是否能拦截到信号SIGPIPE