значение EPOLLERR из epoll_wait с трубкой - PullRequest
0 голосов
/ 26 июня 2018

Это похоже на вопрос 1 , но касается труб.Если epoll_wait возвращает EPOLLERR для конца записи канала, как мне отличить общее состояние ошибки от конца чтения канала, который был закрыт?Для случая сокетов ответом было использование «использовать getsockopt и SO_ERROR, чтобы получить ожидающую ошибку» и сравнить это с EPIPE.Но какой API я должен использовать для канала, так как канал, созданный pipe (2) в Linux или возвращенный открытием именованного канала, не является сокетом?

1 Ответ

0 голосов
/ 26 июня 2018

Кроме того, что другой конец закрыт, на конце записи канала нет никаких ошибок, которые могли бы быть обнаружены epoll.Несколько ошибок, которые возможны при реальном вызове write (), не могут быть известны заранее (например, если вы передаете недопустимый указатель буфера), поэтому epoll не может их обнаружить.Поэтому, если epoll сообщает, что есть ошибка, это EPIPE.

(ОК, на самом деле существует другое возможное условие ошибки, но оно может быть вызвано только ошибкой программирования: если вы закроете дескриптор файла, а затемиспользуйте epoll_wait, пока он есть в списке - я не знаю, как epoll отреагирует на это).

...