12

我正在查看poll() 手册页,它告诉我poll()为 timeout 参数传入正值和负值时的行为。它并没有告诉我如果 timeout 是 会发生什么0有任何想法吗?

查看epoll_wait() 手册页,它告诉我超时值为 时0,即使没有可用的事件,它也会立即返回。假设它poll() 的行为方式相同是否安全?

4

3 回答 3

9

它将立即返回:

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

, 自Mac OS X 10.5;

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

, 作为OpenBSD 3.8

于 2009-02-09T21:14:30.353 回答
3

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

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

问候,

于 2009-02-09T21:37:59.657 回答
0

从 Ubuntu 手册页:

timeout 参数指定 poll() 将阻塞的时间上限,以毫秒为单位。在 timeout 中指定负值意味着无限超时。

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

于 2009-02-09T21:12:07.443 回答