我正在查看poll()
手册页,它告诉我poll()
为 timeout 参数传入正值和负值时的行为。它并没有告诉我如果 timeout 是 会发生什么0
。有任何想法吗?
查看epoll_wait()
手册页,它告诉我超时值为 时0
,即使没有可用的事件,它也会立即返回。假设它poll()
的行为方式相同是否安全?
它将立即返回:
如果 timeout 大于零,它指定等待任何文件描述符准备好的最大间隔(以毫秒为单位)。如果超时为零,
poll()
则将返回而不阻塞。如果 timeout 的值为-1
,则poll
无限期地阻塞。
, 自Mac OS X 10.5
;
等待轮询完成的最大间隔,以毫秒为单位。如果此值为 0,
poll()
将立即返回。如果此值为INFTIM (-1)
,poll()
将无限期阻塞,直到找到条件。
, 作为OpenBSD 3.8
在我看来,等待超时意味着“有”超时。这样,我希望 poll() 实际上检查文件描述符,然后等待如果没有人准备好超时 0 毫秒(根本不等待)。但情况是,如果 fd 可用,它只会发出信号。
我还检查了 linux 源代码,据我所知,这是它的工作方式:首先计算“未来”等待点,然后检查文件描述符,然后如果没有可用的文件描述符,则等待指定的超时时间。
问候,
从 Ubuntu 手册页:
timeout 参数指定 poll() 将阻塞的时间上限,以毫秒为单位。在 timeout 中指定负值意味着无限超时。
因为 0 没有特殊情况,所以我假设 poll() 将阻塞 0 毫秒。