net/dnscache: use tls.Conn.HandshakeContext.
Go 1.17 added a HandshakeContext func to take care of timeouts during
TLS handshaking, so switch from our homegrown goroutine implementation
to the standard way.
@@ -444,22 +444,9 @@ func TLSDialer(fwd DialContextFunc, dnsCache *Resolver, tlsConfigBase *tls.Confi
}
tlsConn := tls.Client(tcpConn, cfg)
- errc := make(chan error, 2)
handshakeCtx, handshakeTimeoutCancel := context.WithTimeout(ctx, 5*time.Second)
defer handshakeTimeoutCancel()
- done := make(chan bool)
- defer close(done)
- go func() {
- select {
- case <-done:
- case <-handshakeCtx.Done():
- errc <- errTLSHandshakeTimeout
- }
- }()
- go func() {
- errc <- tlsConn.Handshake()
- }()
- if err := <-errc; err != nil {
+ if err := tlsConn.HandshakeContext(handshakeCtx); err != nil {
tcpConn.Close()
// TODO: if err != errTLSHandshakeTimeout,
// assume it might be some captive portal or
