in pkg/hbone/io.go [260:285]
func HandshakeTimeout(tlsConn *tls.Conn, d time.Duration, plainConn net.Conn) error {
errc := make(chan error, 2)
var timer *time.Timer // for canceling TLS handshake
if d == 0 {
d = 3 * time.Second
}
timer = time.AfterFunc(d, func() {
errc <- tlsHandshakeTimeoutError{}
})
go func() {
err := tlsConn.Handshake()
if timer != nil {
timer.Stop()
}
errc <- err
}()
if err := <-errc; err != nil {
if plainConn != nil {
plainConn.Close()
} else {
tlsConn.Close()
}
return err
}
return nil
}