Остановите EPOLLHUP на закрытом псевдо-терминале
Я работаю над небольшой библиотекой для создания пары подключенных очков. Я использую epoll fd
, в котором я регистрирую master fd
для двух псевдо-терминалов для EPOLLIN
События. Когда мой пример клиентской программы запускается, цикл событий простаивает, и это происходит, когда два клиента (в моем случае microcom) открывают каждого ведомого. Но когда любой из клиентов закрывает свой подчиненный конец, epoll_wait
постоянно сообщает EPOLLHUP
события для хозяина раба.
Чтобы предотвратить это, я держу файловый дескриптор открытым O_WRONLY
на каждого раба работает (не более EPOLLHUP
), но я думаю, что это скорее взлом, чем реальное решение... Сокат, кажется, использует напряженное ожидание с небольшим сном в этой ситуации.
Я пытался:
- использовать поведение Edge Triggered
EPOLL_CTL_DEL
затем повторно добавьте мастер, производящий HUP
Ни одна из этих попыток не дала никакого результата.
Есть ли способ очистить "состояние HUP" и вернуть дескрипторы мастер-файла в их состояние до открытия их ведомого, после возникновения EPOLLHUP?