Возможно ли сбой сетевой записи (), но poll() не обнаруживает

Возможно ли, что вызов write() для сокета не удался, но poll() не обнаружил никакой ошибки? Существуют ли какие-либо категории ошибок, которые могут вызвать сбой записи, но не считаются ошибкой системным вызовом poll()?

У меня есть ветка диспетчера, которая следит за сокетами и отвечает за обнаружение и обработку ошибок сокетов. У меня есть рабочий поток, который выполняет фактическое чтение и запись в сокеты при получении уведомления от диспетчера. Вызов write() рабочего потока завершается неудачно, но системный вызов poll() этого потока никогда не сообщает об ошибке. Как это может произойти!

1 ответ

Если write() не удается, он возвращает -1 и устанавливает errno, Это единственное указание на ошибку, которую вы получаете. Если вам нужно отправить эту ошибку куда-то еще, вы должны сделать это самостоятельно.

poll() будет отдельно определять некоторые исключительные условия, которые могут вызвать эту ошибку, например, закрытое соединение TCP. Это не то же самое, что "обнаружение" неудавшегося write() - poll() не обнаруживает и не может обнаружить эти ошибки.

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