当timeout为0时,poll()函数会立即检查文件描述符的状态并立即返回。

13

我正在查看 poll() 的文档,它告诉我在 timeout 参数传入正值和负值时的行为。但它没有说明如果 timeout 为 0 会发生什么。 你有什么想法吗?

查看 epoll_wait() 的文档,它告诉我当 timeout 值为 0 时,即使没有事件可用,它也会立即返回。那么可以安全地假设 poll() 也会表现出同样的行为吗?

3个回答

11

它将立即返回:

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

截至于Mac OS X 10.5

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

截至于OpenBSD 3.8


3
据我看来,等待超时意味着“拥有”一个超时。因此,我希望poll()实际上会“检查”文件描述符,如果没有准备好的,则等待0毫秒的超时(根本不等待)。但情况是它只会在fd可用时发出信号。
我还查阅了Linux源代码,并据我所知,这就是其工作方式:首先计算“未来”的等待点,然后检查文件描述符,如果没有可用的,则等待指定时间的超时。
谢谢。

0

来自Ubuntu手册:

timeout参数指定了poll()函数阻塞的最长时间上限,以毫秒为单位。如果timeout参数指定为负值,则表示超时时间无限。

由于没有针对0的特殊情况,因此我认为poll()函数将会阻塞0毫秒。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接