英文:
In golang what error will TCPConn.Write/Read return?
问题
在Golang中,你可以通过以下方式处理TCPConn.Read/Write返回的错误:
-
使用
io
包中的ReadFull
和WriteFull
函数来确保读取和写入指定长度的数据。这些函数会在读取/写入不足指定长度的情况下返回错误。 -
使用
bufio
包中的Reader
和Writer
来进行缓冲读写操作。这些类型提供了更高级的接口,可以处理部分读写的情况,并提供了更多的错误信息。 -
在进行读写操作之前,可以使用
SetReadDeadline
和SetWriteDeadline
方法设置读写超时时间。如果在指定的时间内没有完成读写操作,将返回超时错误。 -
对于特定的错误类型,可以使用类型断言来判断错误的具体类型,并根据需要进行处理。例如,可以使用
net
包中定义的OpError
类型来判断是否是连接关闭的错误。
需要注意的是,以上只是一些处理错误的常见方法,具体的处理方式还取决于你的应用场景和需求。
英文:
In golang, how would you handle error return by TCPConn.Read/Write?
this document did not say anything about read/write errors.
答案1
得分: 8
在TCPConn
上进行Read
和Write
操作可能会返回大部分由操作系统、硬件和驱动程序组合产生的错误,以及一些net
包错误和适用时的io.EOF
。因此,你需要知道要查找哪些错误,并且如何处理它们。网络API的每一层,甚至是伯克利套接字API,都是有缺陷的抽象,如果不了解实际的套接字和网络协议的工作原理,就无法充分利用它。
通常,你只需要关注io.EOF
,它在连接关闭时由Conn.Read
返回。在TCP套接字上,这相当于在阻塞连接上接收到0字节的recv
返回。
其他你可以处理的错误通常被包装在一个net.Error
中,它提供了Temporary()
和Timeout()
方法。通常,真正的错误类型是*net.OpError
,它可以提供关于错误发生时间的更多信息,并封装操作返回的实际错误。
英文:
Read
and Write
on a TCPConn
could return most of errors that your combination of OS, hardware and drivers could return, along with some net
package errors, and io.EOF
when applicable. So it's really up to you to know what errors to look for, and how to handle them. Every layer of network API, even the berkeley socket api, is a leaky abstraction, and you can't make full use of it without understanding how the actual sockets and network protocols work.
Usually you only need be concerned with io.EOF
, which is returned by Conn.Read
when the connection is closed. On a TCP socket, this is the equivalent of recv
returning 0 bytes on a blocking connection.
Any other errors that you could handle are usually wrapped in a net.Error
, which provides the Temporary()
and Timeout()
methods. Often the real error type is a *net.OpError
, which can provide even more information about when the error occurred, as well as encapsulate the actual error returned by the operation.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论