【问题标题】:What does poll() do with a timeout of 0?如果超时为 0,poll() 会做什么?
【发布时间】:2009-02-09 21:09:01
【问题描述】:

我正在查看poll()man page,它告诉我poll() 在为超时参数传入正值和负值时的行为。如果超时为0,它并没有告诉我会发生什么。 有什么想法吗?

查看epoll_wait()man page,它告诉我超时值为0,即使没有可用的事件,它也会立即返回。假设poll() 会以同样的方式表现是否安全?

【问题讨论】:

    标签: c linux sockets epoll


    【解决方案1】:

    它会立即返回:

    如果 timeout 大于零,它指定等待任何文件描述符准备好的最大间隔(以毫秒为单位)。如果超时为零,则poll() 将返回而不阻塞。如果 timeout 的值为-1,则poll 无限期阻塞。

    ,截至Mac OS X 10.5

    等待轮询完成的最大间隔,以毫秒为单位。如果此值为 0,poll() 将立即返回。如果此值为INFTIM (-1)poll() 将无限期阻塞,直到找到条件为止。

    ,截至OpenBSD 3.8

    【讨论】:

      【解决方案2】:

      在我看来,等待超时意味着“有”超时。这样,我希望 poll() 实际上 检查 文件描述符,然后等待如果没有人准备好超时 0 毫秒(根本不等待)。 的情况是,如果 fd 可用,它只会发出信号。

      我还检查了 linux 源代码,据我所知,这是它的工作方式:首先计算“未来”等待点,然后检查文件描述符,如果没有可用的文件描述符,则等待指定的超时时间。

      问候,

      【讨论】:

        【解决方案3】:

        来自 Ubuntu 手册页:

        超时参数指定一个 时间上限 poll() 将阻塞,以毫秒为单位。 在超时中指定负值 表示无限超时。

        因为 0 没有特殊情况,所以我假设 poll() 会阻塞 0 毫秒。

        【讨论】:

          猜你喜欢
          • 2016-03-01
          • 2011-12-06
          • 1970-01-01
          • 1970-01-01
          • 2011-02-08
          • 1970-01-01
          • 1970-01-01
          • 2019-09-21
          • 1970-01-01
          相关资源
          最近更新 更多