是否存在与select()的“errorfds”集等效的kqueue()/kevent()?

是否存在与select()的“errorfds”集等效的kqueue()/kevent()?,select,error-handling,kqueue,Select,Error Handling,Kqueue,今天我将一些代码从select移植到kqueue,我注意到kevent似乎没有类似select的异常集特性 也就是说,select的函数签名是: int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict errorfds, struct timeval *restrict timeout); 。。。对于kevent,EVFILT_READ对应于readfds,EVFILT

今天我将一些代码从select移植到kqueue,我注意到kevent似乎没有类似select的异常集特性

也就是说,select的函数签名是:

int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict errorfds, struct timeval *restrict timeout);
。。。对于kevent,EVFILT_READ对应于readfds,EVFILT_WRITE对应于writefds,但是我没有看到任何类似于EVFILT_ERROR的东西会对应于errorfds


kevent下是否真的不支持套接字错误条件,或者它是否存在,但以某种我不清楚的方式实现?

不可能以这种方式进行过滤。您必须根据标志EV_EOF和FFLAG手动对传入事件进行分类。

您需要errorfds做什么?读错误已经通过读事件报告,而写错误是通过读或写失败导致的写事件报告的。