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

时间:2013-03-15 00:57:31

标签: linux polling system-calls

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

3 个答案:

答案 0 :(得分:7)

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

POLLIN有数据需要阅读。 POLLPRI有紧急数据可供阅读。

如果仅使用POLLIN,如果有数据或紧急数据要读取,poll()将返回。 如果仅使用POLLPRI,则仅当存在要读取的紧急数据时,poll()才会返回,但忽略正常数据。

什么是紧急数据? 就像tcp的带外数据一样。在TCP帧头中,有一个名为urg_data的标志。 Urg_data表示此框架具有更高的交付优先级。 一旦内核收到urg_data maked帧,它就会设置一个POLLPRI标志!请查看以下代码:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

根据UNIX网络编程第3版,guard let snapshotDict = snapshot.value as? [String: String] else { // Do something to handle the error // if your snapshot.value isn't the type you thought it was going to be. } let employerName = snapshotDict["employerName"] let employerImage = snapshotDict["employerImage"] let uid = snapshotDict["fid"] 是STREAMS独有的,在POSIX兼容系统上使用TCP或UDP时永远不会被触发。

https://books.google.dk/books?id=ptSC4LpwGA0C&pg=PA183&lpg=PA183&dq=POLLRDNORM+POLLRDBAND+POLLPRI&source=bl&ots=Ks7CSockOv&sig=nqzhameGpvzi_TSq1-2qi9gqdaY&hl=en&sa=X&ved=0ahUKEwjjqaOh9cbPAhWGjCwKHWjxCdw4ChDoAQg_MAc#v=onepage&q=POLLRDNORM%20POLLRDBAND%20POLLPRI&f=false