请教一下,关于net.Dialer 参数DualStack

colin321 · · 2135 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

#### 起因 `UOS系统` 上部署http服务, consul 健康检查 时不时报错 `operation not permitted` *其他系统没有这个问题* consul 和 服务在同一台机器 #### 现象 1. 远程访问服务,没有发现服务有不可用的情况 2. 注册http://baidu.com 作为健康检查http 到consul上,没有发生报错情况 3. 注册 其他系统windows,center os的服务,以ip:port方式访问,也会时不时报错 #### 问题解决 通过查看consul源码,发现它使用了`github.com/hashicorp/go-cleanhttp`, transport是这样设置的 ``` func DefaultPooledTransport() *http.Transport { transport := &http.Transport{ Proxy: http.ProxyFromEnvironment, DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, DualStack: true, }).DialContext, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, ForceAttemptHTTP2: true, MaxIdleConnsPerHost: runtime.GOMAXPROCS(0) + 1, } return transport } ``` golang 1.17版本的默认 transport是这样的 ``` var DefaultTransport RoundTripper = &Transport{ Proxy: ProxyFromEnvironment, DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).DialContext, ForceAttemptHTTP2: true, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, } ``` 然后,我加上了这个参数`DualStack: true` 本地请求服务器, 没有什么问题, 当把这个客户端放在服务器上跑时,跟consul同样的情况就发生了。 最后注释这行代码,重新编译,问题没有再次出现 #### 我的问题 net.Dialer 参数DualStack 是做什么用的,这个现象的原因,有没有大佬能解答下

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2135 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传