func HandshakeTimeout()

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
}