Ver Fonte

Use timeouts when dialing tls sockets

When using tls we should set timeouts when dialing to prevent
blocking indefintely on downed hosts.
Chris Bannister há 11 anos atrás
pai
commit
b64d286286
1 ficheiros alterados com 10 adições e 4 exclusões
  1. 10 4
      conn.go

+ 10 - 4
conn.go

@@ -112,13 +112,19 @@ func Connect(addr string, cfg ConnConfig, errorHandler ConnErrorHandler) (*Conn,
 		conn net.Conn
 		conn net.Conn
 	)
 	)
 
 
+	dialer := &net.Dialer{
+		Timeout: cfg.Timeout,
+	}
+
 	if cfg.tlsConfig != nil {
 	if cfg.tlsConfig != nil {
 		// the TLS config is safe to be reused by connections but it must not
 		// the TLS config is safe to be reused by connections but it must not
 		// be modified after being used.
 		// be modified after being used.
-		if conn, err = tls.Dial("tcp", addr, cfg.tlsConfig); err != nil {
-			return nil, err
-		}
-	} else if conn, err = net.DialTimeout("tcp", addr, cfg.Timeout); err != nil {
+		conn, err = tls.DialWithDialer(dialer, "tcp", addr, cfg.tlsConfig)
+	} else {
+		conn, err = dialer.Dial("tcp", addr)
+	}
+
+	if err != nil {
 		return nil, err
 		return nil, err
 	}
 	}