В golang, как бы вы справились с возвратом ошибки TCPConn.Read/Write? этот document ничего не говорил о ошибках чтения/записи.В golang какая ошибка будет TCPConn.Write/Read return?
ответ
Read
и Write
на TCPConn
может вернуть большинство ошибок, которые могли бы вернуть ваши комбинации ОС, аппаратных средств и водителей, а также с некоторыми net
ошибок пакета, и io.EOF
когда это применимо. Поэтому вам действительно нужно знать, какие ошибки искать и как их обрабатывать. Каждый слой API сети, даже api-сервер berkeley, является негерметичной абстракцией, и вы не можете в полной мере использовать его, не понимая, как работают фактические сокеты и сетевые протоколы.
Обычно вам нужно только беспокоиться о io.EOF
, который возвращается Conn.Read
, когда соединение будет закрыто. В сокете TCP это эквивалент recv
, возвращающий 0 байтов на блокирующее соединение.
Любые другие ошибки, которые вы могли бы обрабатывать, обычно завертываются в net.Error
, который предоставляет методы и Timeout()
. Часто реальный тип ошибки - *net.OpError
, который может предоставить еще больше информации о том, когда произошла ошибка, а также инкапсулировать фактическую ошибку, возвращаемую операцией.
надежный код должен корректно обрабатывать все ошибки. Например, в Linux, чтобы поддерживать живое соединение tcp, некоторые ошибки должны повторно набирать соединение, а другие нет. Просто не могу это испортить. хороший ответ. – zzn
Какие конкретные ошибки он возвращает, зависит от архитектуры. Однако обрабатывайте его, как любую другую ошибку. – thwd