Возможно ли сбой сетевой записи (), но poll() не обнаруживает
Возможно ли, что вызов write() для сокета не удался, но poll() не обнаружил никакой ошибки? Существуют ли какие-либо категории ошибок, которые могут вызвать сбой записи, но не считаются ошибкой системным вызовом poll()?
У меня есть ветка диспетчера, которая следит за сокетами и отвечает за обнаружение и обработку ошибок сокетов. У меня есть рабочий поток, который выполняет фактическое чтение и запись в сокеты при получении уведомления от диспетчера. Вызов write() рабочего потока завершается неудачно, но системный вызов poll() этого потока никогда не сообщает об ошибке. Как это может произойти!
1 ответ
Если write()
не удается, он возвращает -1 и устанавливает errno
, Это единственное указание на ошибку, которую вы получаете. Если вам нужно отправить эту ошибку куда-то еще, вы должны сделать это самостоятельно.
poll()
будет отдельно определять некоторые исключительные условия, которые могут вызвать эту ошибку, например, закрытое соединение TCP. Это не то же самое, что "обнаружение" неудавшегося write()
- poll()
не обнаруживает и не может обнаружить эти ошибки.