从go1.3升级到go1.5.2后,我在连接中遇到DNS请求超时,它通过网络库中的ResolveTCPAddr()API。我深入挖掘一下,看看go1.5中出了什么问题,因为在go1.5的发行说明中提到了DNS解析实现的变化。
https://golang.org/doc/go1.5#net
在go1.5中,对于未知地址的DNS解析,首先是UDP拨号,然后是TCP拨号以发出DNS请求。
https://github.com/golang/go/blob/release-branch.go1.5/src/net/dnsclient_unix.go#L134
有时,对于dns请求的UDP conn读取是超时的(可能无论出于何种原因都是UDP),并且我的连接建立速度非常慢(1ms有时会变为5秒)。
这使我在编译时强制--netcgo标志恢复到发行说明中提到的旧行为。但我想解决这个问题,而不必强迫任何不违约的东西。
这是一个已知的问题?有没有人碰到这个?我还想了解为什么它首先建立一个udp连接,以及它之前做了什么,以及为此采取了不同的行动。