4

我今天将一些代码从 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() 下是否真的不支持套接字错误条件,或者它是否存在但以某种对我来说并不明显的方式实现?

4

1 回答 1

0

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

于 2011-12-31T19:35:59.583 回答