Есть ли 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(), или они есть, но реализованы каким-то образом, что мне не очевидно?
1 ответ
Решение
Это невозможно отфильтровать таким образом. Вы должны вручную классифицировать входящие события на основе флагов (EV_EOF) и fflags.