有没有kqueue()/ kevent()等效于select()的“errorfds”设置?

时间:2011-12-20 04:07:08

标签: 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_WRITE对应于(writefds),但我没有看到与EVFILT_ERROR对应的(errorfds)。

在kevent()下是否真的不支持socket错误条件,或者它是否存在但是以某种方式实现对我来说不明显?

1 个答案:

答案 0 :(得分:0)

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