使用 kqueue 轮询异常情况
我正在修改一个应用程序,以便将其对 select() 的使用替换为 kqueue。 select() 允许轮询异常条件:
int select(int nfds,
fd_set *restrict readfds,
fd_set *restrict writefds,
fd_set *restrict errorfds, <---- this thing here
struct timeval *restrict timeout
);
阅读 kqueue 文档后,似乎没有办法做到这一点。有 EVFILT_READ
和 EVFILT_WRITE
,但没有与 EVFILT_ERROR
/EVFILT_EXCEPTIONAL
类似的内容。是否可以轮询特殊情况?如果可以,如何进行?
I'm modifying an app in order to replace its use of select() with kqueue. select() allows one to poll for exceptional conditions:
int select(int nfds,
fd_set *restrict readfds,
fd_set *restrict writefds,
fd_set *restrict errorfds, <---- this thing here
struct timeval *restrict timeout
);
After reading the kqueue documentation it looks like there's no way to do that. There's EVFILT_READ
and EVFILT_WRITE
but nothing along the lines of EVFILT_ERROR
/EVFILT_EXCEPTIONAL
. Is it possible to poll for exceptional conditions, and if so, how?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
FreeBSD 上不存在异常状态,引用
man 2 select
:所以你的问题归结为“如何使用 kqueue 检测套接字上的 OOB 数据”,老实说,如果不做一些研究,我无法回答这个问题。
There is no such thing as exceptional state on FreeBSD, to quote
man 2 select
:So your question boils down to “How can I detect OOB-data on a socket with kqueue”, which I, to be honest, cannot answer without doing some research.