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