Вызов recv возвращает 0 против события POLLHUP в опросе C

(В программировании сокетов C, используяpollдля управления fd и его событиями)
с сокетом потока данных, возвращенным изaccept()call, в чем разница между событием POLLHUP и получением 0 при вызове recv(fd, ...)? Оба они, кажется, указывают на то, что соединение было закрыто с другого конца, но я хотел знать, есть ли какая-либо техническая разница между ними.

1 ответ

вreventsизstruct pollfdсообщает вам, был ли закрыт другой конец трубы или розетки. Это означает, что вы не можете писать в дескриптор (если он открыт для записи), не получивSIGPIPE, но все еще могут быть данные, ожидающие чтения (если они открыты для чтения). После того, как все оставшиеся байты будут прочитаны, будут выполняться такие функции, какrecv(2)иread(2)вернет 0.

ОбаPOLLINи, таким образом, может быть установлен одновременно, но неPOLLOUTиPOLLHUP- эти два взаимоисключающие.

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