poll() 的文档没有详细解释这一点。在 fd 上轮询时,什么时候应该使用 POLLIN,什么时候应该使用 POLLPRI?任何见解都会很有用。
问问题
13187 次
3 回答
9
poll() 文档中有一些描述。
POLLIN 有数据要读取。POLLPRI 有紧急数据要读取。
如果仅使用 POLLIN,则 poll() 将在有数据或紧急数据要读取时返回。如果只使用 POLLPRI,poll() 将仅在有紧急数据要读取时返回,而忽略正常数据。
什么是紧急数据?比如tcp的带外数据。在 TCP 帧头中,有一个名为 urg_data 的标志。Urg_data 表示此帧具有更高的传递优先级。一旦内核接收到一个 urg_data 生成的帧,它就会设置一个 POLLPRI 标志!看下面的代码:
...
if (tp->urg_data & TCP_URG_VALID)
mask |= POLLPRI;
....
return mask;
于 2013-03-15T02:00:59.913 回答
2
根据 UNIX Network Programming, 第 3 版,POLLPRI
STREAMS 独有,在 POSIX 兼容系统上使用 TCP 或 UDP 时永远不会触发。
于 2016-10-06T19:57:12.733 回答
1
我总是使用它们,这是可能的,因为它们是位掩码(所以你可以使用POLLIN | POLLPRI
)。
优先级条目用于被认为比常规信息更重要的信息。理想情况下,您会要求两种类型,然后首先检查/处理优先级。
于 2013-03-15T01:07:12.407 回答