Fix "happy eyeballs" not being disabled since Golang 1.12 upgrade

* The Dialer.DualStack setting is now ignored and deprecated; RFC 6555 Fast Fallback ("Happy Eyeballs") is now enabled by default. To disable, set Dialer.FallbackDelay to a negative value.
This commit is contained in:
Ashcon Partovi 2019-11-22 10:07:14 -08:00
parent dfd1ca5fb5
commit 43babbc2f9
4 changed files with 14 additions and 9 deletions

View File

@ -203,11 +203,14 @@ func prepareTunnelConfig(
TLSClientConfig: &tls.Config{RootCAs: originCertPool, InsecureSkipVerify: c.IsSet("no-tls-verify")}, TLSClientConfig: &tls.Config{RootCAs: originCertPool, InsecureSkipVerify: c.IsSet("no-tls-verify")},
} }
dialContext := (&net.Dialer{ dialer := &net.Dialer{
Timeout: c.Duration("proxy-connect-timeout"), Timeout: c.Duration("proxy-connect-timeout"),
KeepAlive: c.Duration("proxy-tcp-keepalive"), KeepAlive: c.Duration("proxy-tcp-keepalive"),
DualStack: !c.Bool("proxy-no-happy-eyeballs"), }
}).DialContext if c.Bool("proxy-no-happy-eyeballs") {
dialer.FallbackDelay = -1 // As of Golang 1.12, a negative delay disables "happy eyeballs"
}
dialContext := dialer.DialContext
if c.IsSet("unix-socket") { if c.IsSet("unix-socket") {
unixSocket, err := config.ValidateUnixSocket(c) unixSocket, err := config.ValidateUnixSocket(c)

View File

@ -202,7 +202,7 @@ func (em *EdgeManager) dialEdge(ctx context.Context, edgeIP *net.TCPAddr) (*tls.
dialCtx, dialCancel := context.WithTimeout(ctx, timeout) dialCtx, dialCancel := context.WithTimeout(ctx, timeout)
defer dialCancel() defer dialCancel()
dialer := net.Dialer{DualStack: true} dialer := net.Dialer{}
edgeConn, err := dialer.DialContext(dialCtx, "tcp", edgeIP.String()) edgeConn, err := dialer.DialContext(dialCtx, "tcp", edgeIP.String())
if err != nil { if err != nil {
return nil, dialError{cause: errors.Wrap(err, "DialContext error")} return nil, dialError{cause: errors.Wrap(err, "DialContext error")}

View File

@ -465,7 +465,7 @@ type TunnelHandler struct {
noChunkedEncoding bool noChunkedEncoding bool
} }
var dialer = net.Dialer{DualStack: true} var dialer = net.Dialer{}
// NewTunnelHandler returns a TunnelHandler, origin LAN IP and error // NewTunnelHandler returns a TunnelHandler, origin LAN IP and error
func NewTunnelHandler(ctx context.Context, func NewTunnelHandler(ctx context.Context,

View File

@ -197,11 +197,14 @@ func (hc *HTTPOriginConfig) Service() (originservice.OriginService, error) {
return nil, err return nil, err
} }
dialContext := (&net.Dialer{ dialer := &net.Dialer{
Timeout: hc.ProxyConnectionTimeout, Timeout: hc.ProxyConnectionTimeout,
KeepAlive: hc.TCPKeepAlive, KeepAlive: hc.TCPKeepAlive,
DualStack: hc.DialDualStack, }
}).DialContext if !hc.DialDualStack {
dialer.FallbackDelay = -1
}
dialContext := dialer.DialContext
transport := &http.Transport{ transport := &http.Transport{
Proxy: http.ProxyFromEnvironment, Proxy: http.ProxyFromEnvironment,
DialContext: dialContext, DialContext: dialContext,
@ -270,7 +273,6 @@ func (*HelloWorldOriginConfig) Service() (originservice.OriginService, error) {
DialContext: (&net.Dialer{ DialContext: (&net.Dialer{
Timeout: 30 * time.Second, Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second, KeepAlive: 30 * time.Second,
DualStack: true,
}).DialContext, }).DialContext,
TLSClientConfig: &tls.Config{ TLSClientConfig: &tls.Config{
RootCAs: rootCAs, RootCAs: rootCAs,