Остановите EPOLLHUP на закрытом псевдо-терминале

Я работаю над небольшой библиотекой для создания пары подключенных очков. Я использую epoll fd, в котором я регистрирую master fd для двух псевдо-терминалов для EPOLLIN События. Когда мой пример клиентской программы запускается, цикл событий простаивает, и это происходит, когда два клиента (в моем случае microcom) открывают каждого ведомого. Но когда любой из клиентов закрывает свой подчиненный конец, epoll_wait постоянно сообщает EPOLLHUP события для хозяина раба.

Чтобы предотвратить это, я держу файловый дескриптор открытым O_WRONLY на каждого раба работает (не более EPOLLHUP), но я думаю, что это скорее взлом, чем реальное решение... Сокат, кажется, использует напряженное ожидание с небольшим сном в этой ситуации.

Я пытался:

  • использовать поведение Edge Triggered
  • EPOLL_CTL_DEL затем повторно добавьте мастер, производящий HUP

Ни одна из этих попыток не дала никакого результата.

Есть ли способ очистить "состояние HUP" и вернуть дескрипторы мастер-файла в их состояние до открытия их ведомого, после возникновения EPOLLHUP?

0 ответов

Другие вопросы по тегам