当前位置: > > > > net.Conn 是否存在可恢复的读取错误?
来源:stackoverflow
2024-04-28 21:00:33
0浏览
收藏
今天将给大家带来《net.Conn 是否存在可恢复的读取错误?》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!
问题内容
如果 net.Conn
的 .Read()
方法返回错误,这是否意味着将来的读取也会失败并出现错误?或者有可恢复的错误吗?如果是这样,我如何知道是否/何时重试读取?
解决方案
一般来说,可重试的 conn.read
操作不会出现任何错误。 io.reader
接口的大多数用途将假定所有错误都是最终的。
任何确保可重试的 net
包错误都将符合 接口,并公开 temporary
方法。
这最常用于 accept
循环,就像 http 包中的这个解释示例
for { rw, e := l.accept() if e != nil { if ne, ok := e.(net.error); ok && ne.temporary() { if tempdelay == 0 { tempdelay = 5 * time.millisecond } else { tempdelay *= 2 } if max := 1 * time.second; tempdelay > max { tempdelay = max } time.sleep(tempdelay) continue } return e } }
任何其他可能的情况都需要根据协议和当前情况进行单独处理。
超时是从 读取时唯一可恢复的错误,并且该错误只会当 a 时返回。
使用 检查重试时可能解决的错误,使用 检查超时:
n, err := c.Read(buf) // process buf[:n] bytes if e.(net.Error); ok && e.Timeout() && e.Temporary() { // handle recoverable read deadline expiration } else if err != nil { // handle other errors }
好了,本文到此结束,带大家了解了《net.Conn 是否存在可恢复的读取错误?》,希望本文对你有所帮助!关注公众号,给大家分享更多Golang知识!