【发布时间】:2009-02-09 21:09:01
【问题描述】:
我正在查看poll()man page,它告诉我poll() 在为超时参数传入正值和负值时的行为。如果超时为0,它并没有告诉我会发生什么。 有什么想法吗?
查看epoll_wait()man page,它告诉我超时值为0,即使没有可用的事件,它也会立即返回。假设poll() 会以同样的方式表现是否安全?
【问题讨论】:
我正在查看poll()man page,它告诉我poll() 在为超时参数传入正值和负值时的行为。如果超时为0,它并没有告诉我会发生什么。 有什么想法吗?
查看epoll_wait()man page,它告诉我超时值为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 手册页:
超时参数指定一个 时间上限 poll() 将阻塞,以毫秒为单位。 在超时中指定负值 表示无限超时。
因为 0 没有特殊情况,所以我假设 poll() 会阻塞 0 毫秒。
【讨论】: