poll()系统调用中POLLIN和POLLPRI的区别

问题描述 投票:0回答:3

poll()的文档没有详细解释这一点。在轮询 fd 时,什么时候应该使用 POLLIN,什么时候应该使用 POLLPRI?任何见解都会有用。

linux polling system-calls
3个回答
11
投票

poll()
文档上有一些描述。

POLLIN  There is data to read.
POLLPRI There is urgent data to read.
  • 如果只使用
    POLLIN
    ,如果有数据或紧急数据读取,
    poll()
    将会返回。
  • 如果只使用
    POLLPRI
    poll()
    只有在有紧急数据需要读取时才会返回,而忽略正常数据。

什么是紧急数据?

比如tcp的带外数据。在 TCP 帧头中,有一个名为

urg_data
的标志。
urg_data
表示该帧具有更高的优先级传送。 一旦内核收到
urg_data
标记的帧,它就会设置一个
POLLPRI
标志!看下面的代码:

...
if (tp->urg_data & TCP_URG_VALID)
   mask |= POLLPRI;
....
return mask;


2
投票

我总是使用它们,这是可能的,因为它们是位掩码(所以你可以使用

POLLIN | POLLPRI
)。

优先条目用于被认为比常规信息更重要的信息。理想情况下,您会要求两种类型,然后首先检查/处理优先类型。

© www.soinside.com 2019 - 2024. All rights reserved.