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.   

    可以,针对readfds中的每个socket,执行recv方法
      

  2.   

    使用select 之前,要不要先用ioctlsocket设置成非阻塞????
      

  3.   

    不用,select这个方法自动给你设置好了,你一次可以接受到多个有数据的socket,只要select第三个参数指定为NULL,那么select会等到有消息发来之后,才返回,如果指定了一个时间值,那么如果一直没有数据到达,等这个时间差过了之后,立刻返回.只要在接受信息的时间,又有新数据的socket到达,那么结构设置为(0,0)也可以接受到数据,只不过效率不高.
      

  4.   

    这些在MSDN里都写的很清楚了,楼主去MSDN中查下select 就好了!