Существует ли kqueue()/kevent(), эквивалентный набору errorfds select()?

Сегодня я переносил некоторый код из 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() просто нет поддержки условий ошибки сокета, или она есть, но реализована каким-то неочевидным для меня способом?


person Jeremy Friesner    schedule 20.12.2011    source источник
comment
Для чего вам нужны errorfds? Об ошибках чтения уже сообщается через события чтения, а об ошибках записи — через события записи (в результате сбоя чтения или записи).   -  person Ambroz Bizjak    schedule 27.12.2011


Ответы (1)


Фильтровать таким образом нельзя. Вы должны вручную классифицировать входящие события на основе флагов (EV_EOF) и fflags.

person Ismael Luceno    schedule 31.12.2011