我通过以下代码实现判断该sokcet是否有数据到达: fd_set fdread;
timeval timeout; memset(&fdread,0,sizeof(fd_set));
memset(&timeout,0,sizeof(timeval)); FD_ZERO(&fdread);
FD_SET(slirSocket,&fdread);
timeout.tv_sec = 5; while(TRUE)
{
if(nRet = select(0,&fdread,NULL,NULL,&timeout) == SOCKET_ERROR)
{
printf("it is error!\r\n"); }
if(nRet == 0)
printf("it is 0\r\n");
if(nRet > 0)
{
recv(slirSocket,dest,sizeof(dest),0);
break;
}
}
运行结果是总是输出“it is 0"不知道什么原因。

解决方案 »

  1.   

    明显的条件重入,改成:
    if(nRet = select(0,&fdread,NULL,NULL,&timeout) == SOCKET_ERROR)
    {
    printf("it is error!\r\n");
    }

    else if(nRet == 0)
    printf("it is 0\r\n");
    else
    {
            recv(slirSocket,dest,sizeof(dest),0);
    break;
    }
      

  2.   

    看错了,ft
    是这样的,
    nRet = select(0,&fdread,NULL,NULL,&timeout);
    //像你那样,因为==优先级高于=,所以nRet成为一个BOOL型,或者是0,或者是1
    //你的条件nRet = select(0,&fdread,NULL,NULL,&timeout) == SOCKET_ERROR 是个赋值操作,永远为真
    if(nRet == SOCKET_ERROR) 
    {
    printf("it is error!\r\n");
    }

    else if(nRet == 0)
    printf("it is 0\r\n");
    else
    {
            recv(slirSocket,dest,sizeof(dest),0);
    break;
    }