2015-07-17 6 views
2

В golang, как бы вы справились с возвратом ошибки TCPConn.Read/Write? этот document ничего не говорил о ошибках чтения/записи.В golang какая ошибка будет TCPConn.Write/Read return?

+1

Какие конкретные ошибки он возвращает, зависит от архитектуры. Однако обрабатывайте его, как любую другую ошибку. – thwd

ответ

5

Read и Write на TCPConn может вернуть большинство ошибок, которые могли бы вернуть ваши комбинации ОС, аппаратных средств и водителей, а также с некоторыми net ошибок пакета, и io.EOF когда это применимо. Поэтому вам действительно нужно знать, какие ошибки искать и как их обрабатывать. Каждый слой API сети, даже api-сервер berkeley, является негерметичной абстракцией, и вы не можете в полной мере использовать его, не понимая, как работают фактические сокеты и сетевые протоколы.

Обычно вам нужно только беспокоиться о io.EOF, который возвращается Conn.Read, когда соединение будет закрыто. В сокете TCP это эквивалент recv, возвращающий 0 байтов на блокирующее соединение.

Любые другие ошибки, которые вы могли бы обрабатывать, обычно завертываются в net.Error, который предоставляет методы и Timeout(). Часто реальный тип ошибки - *net.OpError, который может предоставить еще больше информации о том, когда произошла ошибка, а также инкапсулировать фактическую ошибку, возвращаемую операцией.

+0

надежный код должен корректно обрабатывать все ошибки. Например, в Linux, чтобы поддерживать живое соединение tcp, некоторые ошибки должны повторно набирать соединение, а другие нет. Просто не могу это испортить. хороший ответ. – zzn

 Смежные вопросы

  • Нет связанных вопросов^_^