LINUX.ORG.RU

[epoll][pipe] EPOLL_CTL_DEL возвращяет ошибку EBADF

 ,


0

0

есть поток в котором происходит работа с сокетами. используется epoll. для пробуждения потока используется pipe, который добавляется в epoll.

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

При выходе из демона (получение SIGINT) завершается поток и соответственно pipe должен быть удален из epoll-а. Но при вызове epoll_ctl EPOLL_CTL_DEL на этот pipe выдаётся ошибка EBADF. А для сокетов такой проблемы нет - они удаляются нормально (это означает, что дескриптор epoll-а валидный).

С чем это может быть связано?


Вопрос снят.

Прошелся strace-ом - epoll действительно закрывается до вызова удаления pipe-а: сокеты и epoll удаляются явно в деструкторе потока, а pipe - неявно в своём деструкторе уже после выхода из тела деструктора потока.

stpg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.