FD_ZERO(&fds_r);
FD_SET(sock,&fds_r);
status=select(sock+ 1, &fds_r, NULL, NULL, &timeout); win和linux下代码如上。 select成功之后,我读取内容。问题是:对方给我发送内容之前,他自己要先处理一些事情,然后给我发送消息,我才能select到消息。
但是,对方处理事情的时间不一定。所以我的这个timeout时间不好确定,如果我设置成了无限等待。请问,如果对方有出现类似socket关闭的情况,我这里的是不是程序就一直停在select上了。有没有什么好的策略解决。

解决方案 »

  1.   

    用单独的select没有什么意义啊。
    建议设为非阻塞模式,select设定超时值+while循环。
    select的返回值可以反映出是正常,超时,出错,再做相应的处理。
      

  2.   

    是非阻塞模式。select设定超时值+while循环。
    select的返回值可以反映出是正常,超时,出错,再做相应的处理。======================
    这个怎么反应出来?
    死循环里面设置select?
      

  3.   

    你这里就是想在有数据时读取socket内容吧,不知道具体等待时间还不如直接用recv函数呢!如果你这个时候socket被close了就直接返回出错!