Когда вы создаете kqueue с помощью kqueue()
, вы возвращаете дескриптор файла. Но похоже, что этот дескриптор файла не может быть осмысленно опрошен с помощью select()
. Я понимаю, что стандартный способ опроса/чтения из kqueue()
— это kevent(...)
, но я пытаюсь интегрироваться с некоторым устаревшим кодом, который опрашивает файловые дескрипторы, используя select()
.
Цель здесь заключалась в том, чтобы иметь возможность запускать «пользовательское событие», которое может быть обнаружено этим механизмом опроса на основе select
(даже если событие в конечном итоге необходимо «использовать» с использованием kevent()
позже). Это выглядело так, как будто EVFILT_USER
был рожден для этого, но быстрый эксперимент показывает, что select()
не сообщает о том, что fd kqueue готов к чтению, когда событие добавляется (и запускается) в kqueue, оно просто истекает по тайм-ауту ( или блокирует навсегда). (Но эквивалентный вызов kevent()
действительно видит/возвращает событие.)
Я делаю что-то неправильно? Или просто невозможно опросить fd kqueue с помощью select()
?