2011-12-20 1 views
4

Я портировал код от select() до kqueue() сегодня, и я заметил, что kevent(), похоже, не имеет аналога для функции select() исключения select().Есть ли эквивалент kqueue()/kevent() для select() 'errorfds?

То есть, выберите() 's-функции подписи:

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(), или это там, но реализовано каким-то образом, что не очевидно для меня?

+0

Для чего вам нужна ошибка? Ошибки чтения уже сообщаются через события чтения, а ошибки записи - через события записи (в результате ошибки чтения или записи). –

ответ

0

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