int select(
int nfds, 
fd_set FAR *readfds, 
fd_set FAR *writefds, 
fd_set FAR *exceptfds, 
const struct timeval FAR *timeout 
);
struct timeval {
long tv_sec; // seconds 
long tv_usec; // and microseconds 
};
如果将这个结构设置为(0,0),那么select函数会马上返回。不知道如果这个结构设置为(0,0),能否接收到数据???

解决方案 »

  1.   

    这个函数是从Unix下移植过来的,其实struct timeval的第二个字段long tv_usec;是微秒,不是像你上面注释的毫秒。
    如果缓冲区中有数据,等待时间设置为0也可以立即返回有结果。至于楼上说的资源消耗会很大,也不一定,加上适当的Sleep()就可以。
      

  2.   

    这个SELECT函数可以在设置TIME为0的时候,立即返回缓冲中的数据长度,或者是否可写等
    但是一般不要这么用
    因为一个SOCKET调用一次SELECT,系统消耗比较大
    而应该用数组
    一次检测几十个,
    这样就比较高效设置为0 0,意义是检测状态后立即返回,不会阻塞,当然可以判断出SOCKET的状态的