go - net.Conn 是否存在可恢复的读取错误?
问题描述
如果.Read()
a 的方法net.Conn
返回错误,这是否意味着未来的读取也会因错误而失败?还是有可恢复的错误?如果是这样,我怎么知道是否/何时重试读取?
解决方案
通常,您不会因conn.Read
可重试的操作而出现任何错误。该接口的大多数使用io.Reader
将假定所有错误都是最终错误。
任何net
保证可重试的包错误都将符合net.Error
接口,并公开一个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
}
}
任何其他可能的情况都需要在了解协议和手头情况的情况下单独处理。
推荐阅读
- r - 使用 r 将数据帧拆分为多个 df,并将拆分值作为 df 名称
- c# - 通过 SSH.NET ForwardedPortLocal 从 .NET 代码连接到 MySQL 不起作用
- php - Wordpress home.php 中的分页
- reactjs - '网络错误:查询没有更多的模拟响应:
- .net - dotnet 核心程序集版本控制和 nuget 包版本控制
- html - 在同一个文件中使用包含许多相似 HTML 元素的分页?
- css - 使闪烁的光标在 CSS 动画结束时消失
- c# - Autorun.inf 不起作用,我无法运行 c# exe
- c++ - 野牛解析器中的具体形式 $
$ - jquery - 在悬停时让 div 在所有其他 div 上扩展高度,Bootstrap