Sfoglia il codice sorgente

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

Xiang Li 10 anni fa
parent
commit
72ffa74476
1 ha cambiato i file con 8 aggiunte e 3 eliminazioni
  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,