Использование kqueue для опроса исключительных условий

Я изменяю приложение, чтобы заменить его использование select() на kqueue. select() позволяет опросить исключительные условия:

int select(int nfds,
     fd_set *restrict readfds,
     fd_set *restrict writefds,
     fd_set *restrict errorfds,           <---- this thing here
     struct timeval *restrict timeout
);

После прочтения документации kqueue кажется, что это невозможно сделать. Есть EVFILT_READ и EVFILT_WRITE, но ничего похожего на EVFILT_ERROR/EVFILT_EXCEPTIONAL. Можно ли опрашивать исключительные условия, и если да, то как?


person Hongli    schedule 13.11.2009    source источник


Ответы (1)


В FreeBSD нет такого понятия, как исключительное состояние, если процитировать man 2 select:

Единственным обнаруживаемым исключительным состоянием являются внеполосные данные, полученные на сокете.

Итак, ваш вопрос сводится к тому, «Как я могу обнаружить OOB-данные на сокете с помощью kqueue», на который я, честно говоря, не могу ответить, не проведя некоторых исследований.

person Florian Mayer    schedule 03.08.2010