linux select函数timeout失效

2018-03-22 13:46:20  阅读 6839 次 评论 1 条

socket编程,为了实现非阻塞而使用select函数。原代码在Windows下运行正常,移植到linux下之后超时功能失效,select并未等待timeout参数中设置的超时时间,直接返回 0。


int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);


struct timeval  timeout = { 3, 0};

while (true)

{

    timeout = { 3, 0};

    FD_ZERO(&fd);

    FD_SET(rServerSocket, &fd);

    if (select(ServerSocket + 1, &fd, NULL, NULL, &timeout) > 0)

    {

         ...

    }

    else

    {

            ...

    }

  }


问题原因:linux下select函数每次执行完成后会将timeout参数清空,所以在while循环里每次给timeout变量重新赋值就正常了。也就是说select仅在第一次执行时有等待操作。

本文地址:http://bloguan.com/?id=399
版权声明:本文为原创文章,版权归 博观网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

评论列表

  1. aggresss
    aggresss  @回复