From 6972bc6c36e62b3ec9cece9e3adc7229d27f7dbb Mon Sep 17 00:00:00 2001 From: andig Date: Tue, 15 Mar 2022 19:25:38 +0000 Subject: [PATCH] Equip default transport with reduced connect timeout --- util/request/helper.go | 3 ++- util/transport/default.go | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/util/request/helper.go b/util/request/helper.go index 4506de4cb..41f4f112d 100644 --- a/util/request/helper.go +++ b/util/request/helper.go @@ -6,6 +6,7 @@ import ( "time" "github.com/evcc-io/evcc/util" + "github.com/evcc-io/evcc/util/transport" ) // Timeout is the default request timeout used by the Helper @@ -21,7 +22,7 @@ func NewHelper(log *util.Logger) *Helper { r := &Helper{ Client: &http.Client{ Timeout: Timeout, - Transport: NewTripper(log, http.DefaultTransport), + Transport: NewTripper(log, transport.Default()), }, } diff --git a/util/transport/default.go b/util/transport/default.go index 4e9ed1867..e382d0aae 100644 --- a/util/transport/default.go +++ b/util/transport/default.go @@ -2,16 +2,25 @@ package transport import ( "crypto/tls" + "net" "net/http" + "time" ) -// Default returns http.DefaultTransport as http.Transport instead of http.RoundTripper +// Default returns an http.DefaultTransport as http.Transport with reduced dial timeout func Default() *http.Transport { - t, ok := http.DefaultTransport.(*http.Transport) - if !ok { - panic("http.DefaultTransport is not an http.Transport") + return &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 5 * time.Second, // reduced from 30s + KeepAlive: 30 * time.Second, + }).DialContext, + ForceAttemptHTTP2: true, + MaxIdleConns: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, } - return t } // InsecureTransport is an http.Transport with TLSClientConfig.InsecureSkipVerify enabled