Explorar o código

pkg/transport: update timeout transport to reuse conn when timeout is not set

Xiang Li %!s(int64=10) %!d(string=hai) anos
pai
achega
72ffa74476
Modificáronse 1 ficheiros con 8 adicións e 3 borrados
  1. 8 3
      pkg/transport/timeout_transport.go

+ 8 - 3
pkg/transport/timeout_transport.go

@@ -23,14 +23,19 @@ import (
 // NewTimeoutTransport returns a transport created using the given TLS info.
 // If read/write on the created connection blocks longer than its time limit,
 // it will return timeout error.
+// If read/write timeout is set, transport will not be able to reuse connection.
 func NewTimeoutTransport(info TLSInfo, dialtimeoutd, rdtimeoutd, wtimeoutd time.Duration) (*http.Transport, error) {
 	tr, err := NewTransport(info, dialtimeoutd)
 	if err != nil {
 		return nil, err
 	}
-	// the timeouted connection will timeout soon after it is idle.
-	// it should not be put back to http transport as an idle connection for future usage.
-	tr.MaxIdleConnsPerHost = -1
+
+	if rdtimeoutd != 0 || wtimeoutd != 0 {
+		// the timeouted connection will timeout soon after it is idle.
+		// it should not be put back to http transport as an idle connection for future usage.
+		tr.MaxIdleConnsPerHost = -1
+	}
+
 	tr.Dial = (&rwTimeoutDialer{
 		Dialer: net.Dialer{
 			Timeout:   dialtimeoutd,