Read() после опроса возвращает POLLIN и POLLERR

У меня есть модель пула потоков aysnc для управления сетевым подключением. Один поток диспетчера, который продолжает вызывать poll (), и пул рабочих потоков, который либо считывает / записывает один раз poll (), указывает на это.

Рассмотрим случай, когда poll () указывает, что сокет готов для чтения. Но рабочий поток еще не обработал прочитанное. Я отключаю опросы чтения, пока рабочий поток не обработал чтение. Теперь удаленная сторона отключается и poll () возвращается с помощью POLLERR/POLLHUP. Что происходит, когда рабочий поток вызывает read () после этого?

Возвращает ли read () <0, хотя есть данные, которые еще не были прочитаны? Или же

Читает ли () данные из сети, даже если в сокете был POLLERR/POLLHUP?

1 ответ

Все ожидающие данные будут доставлены до read() возвращает ноль. Однако если read() возвращает -1, ожидающие данные могут быть потеряны.

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