poll()的文档没有详细解释这一点。在fd上轮询时,应该在何时使用POLLIN和何时使用POLLPRI?任何见解都会有用。
答案 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时永远不会被触发。