SOCKET s ;
fd_set  fdread;FD_ZERO(&fdread);
FD_SET(s,&fdread);
        
if((Ret = select(0,&fdread,NULL,NULL,NULL)) == SOCKET_ERROR)
{
sockerror("Select failed! ");
}
        
if (FD_ISSET(s,&fdread))
{
Ret = recv(s,pBuffer,BUFFER_SIZE,0);
………
}这样是不是不能读的时候,就不发生阻塞?

解决方案 »

  1.   

    select会阻塞的,你得设置SOCKET为非阻塞。
      

  2.   

    select会阻塞,最好设置超时返回
      

  3.   

    SOCKET s要为nonblocking.select要设置超时。
      

  4.   

    timeout:  用于决定selete最多等待I/O操作完成多久的时间。如为空指针,那么其调用会无限期地“锁定”或停顿下去,直到至少有一个描述符号符合指定的条件后结束。