【发布时间】:2017-03-18 13:34:57
【问题描述】:
我想知道 POSIX select() 调用中的超时值。我理解为什么人们可能想要 0 值(用于轮询文件描述符)。还有哪些常用的值,以及用于什么目的?
【问题讨论】:
-
可能需要一些内务处理,例如关闭不活动的连接/文件描述符,或向连接的对等方安排保持活动消息,或将摘要行写入日志文件,或将程序状态保存在状态文件中.
标签: c sockets posix poll-syscall
我想知道 POSIX select() 调用中的超时值。我理解为什么人们可能想要 0 值(用于轮询文件描述符)。还有哪些常用的值,以及用于什么目的?
【问题讨论】:
标签: c sockets posix poll-syscall
请注意,对于多路复用目的,poll(2) 通常优于 select(2)(因为 FD_SETSIZE 是对最高文件描述符的严格限制)。
您将使用的实际超时取决于具体情况。在许多 GUI widget toolkit 框架中,您知道屏幕以 50 或 60Hz 的频率刷新,因此您可能会相应地设置超时(例如,设置为 20 毫秒)。或者你知道鼠标应该每秒至少跟随 10 次,等等。实际上,这些工具包也有超时,所以 poll 或 select 超时是在 event loop 的每个周期动态计算的。在 Web 服务器中,超时是可配置的,程序会相应地计算 poll 超时。
在实践中,poll(2) 或 select(2) 通常高于一毫秒,并且可能低于几十秒。 YMMV。顺便说一句,确切的超时时间通常不是很重要。
另请参阅Answers section of Norvig's Teach Yourself Programming in Ten Years 网页(非常有趣的读物)。
【讨论】: