poll()在超时为0时做什么?
我正在查看poll()
手册页 ,它告诉我当为timeout参数传递正值和负值时poll()
的行为。 它不会告诉我如果超时为0
会发生什么。 有任何想法吗?
查看epoll_wait()
手册页 ,它告诉我,当超时值为0
,即使没有可用事件,它也会立即返回。 假设poll()
行为方式相同是否安全?
它会立即返回:
如果timeout大于零,则它指定等待任何文件描述符准备就绪的最大间隔(以毫秒为单位)。 如果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()将阻止的时间上限(以毫秒为单位)。 在超时中指定负值意味着无限超时。
因为0没有特殊情况,我会假设poll()将阻塞0毫秒。