You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package dockerclient
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"net"
|
|
"net/http"
|
|
"net/url"
|
|
"time"
|
|
)
|
|
|
|
type tcpFunc func(*net.TCPConn, time.Duration) error
|
|
|
|
func newHTTPClient(u *url.URL, tlsConfig *tls.Config, timeout time.Duration, setUserTimeout tcpFunc) *http.Client {
|
|
httpTransport := &http.Transport{
|
|
TLSClientConfig: tlsConfig,
|
|
}
|
|
|
|
switch u.Scheme {
|
|
default:
|
|
httpTransport.Dial = func(proto, addr string) (net.Conn, error) {
|
|
conn, err := net.DialTimeout(proto, addr, timeout)
|
|
if tcpConn, ok := conn.(*net.TCPConn); ok && setUserTimeout != nil {
|
|
// Sender can break TCP connection if the remote side doesn't
|
|
// acknowledge packets within timeout
|
|
setUserTimeout(tcpConn, timeout)
|
|
}
|
|
return conn, err
|
|
}
|
|
case "unix":
|
|
socketPath := u.Path
|
|
unixDial := func(proto, addr string) (net.Conn, error) {
|
|
return net.DialTimeout("unix", socketPath, timeout)
|
|
}
|
|
httpTransport.Dial = unixDial
|
|
// Override the main URL object so the HTTP lib won't complain
|
|
u.Scheme = "http"
|
|
u.Host = "unix.sock"
|
|
u.Path = ""
|
|
}
|
|
return &http.Client{Transport: httpTransport}
|
|
}
|