我正在修改一个应用程序,以便用kqueue替换select()的使用。 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
没有任何内容。是否有可能对异常情况进行轮询,如果是,如何?
答案 0 :(得分:0)
FreeBSD上没有异常状态,引用man 2 select
:
唯一可检测的异常情况是套接字上收到的带外数据。
所以你的问题可归结为“如何在具有kqueue的套接字上检测OOB数据”,老实说,如果不进行一些研究,我就无法回答。