@@ -629,6 +629,10 @@ type Dialer interface {
629
629
//
630
630
// Among other uses, this allows to apply a dial timeout.
631
631
func DialWithDialer (dialer Dialer , addr string ) (* Client , error ) {
632
+ return DialWithDialerAndTimeout (dialer , addr , 0 )
633
+ }
634
+
635
+ func DialWithDialerAndTimeout (dialer Dialer , addr string , timeout time.Duration ) (* Client , error ) {
632
636
conn , err := dialer .Dial ("tcp" , addr )
633
637
if err != nil {
634
638
return nil , err
@@ -638,13 +642,14 @@ func DialWithDialer(dialer Dialer, addr string) (*Client, error) {
638
642
// there is no way to set the client's Timeout for that action. As a
639
643
// workaround, if the dialer has a timeout set, use that for the connection's
640
644
// deadline.
641
- var timeout time.Duration
642
- if netDialer , ok := dialer .(* net.Dialer ); ok && netDialer .Timeout > 0 {
643
- err := conn .SetDeadline (time .Now ().Add (netDialer .Timeout ))
644
- if err != nil {
645
- return nil , err
645
+ if timeout == 0 {
646
+ if netDialer , ok := dialer .(* net.Dialer ); ok && netDialer .Timeout > 0 {
647
+ timeout = netDialer .Timeout
646
648
}
647
- timeout = netDialer .Timeout
649
+ }
650
+ err = conn .SetDeadline (time .Now ().Add (timeout ))
651
+ if err != nil {
652
+ return nil , err
648
653
}
649
654
650
655
c , err := NewWithTimeout (conn , timeout )
@@ -666,6 +671,10 @@ func DialTLS(addr string, tlsConfig *tls.Config) (*Client, error) {
666
671
//
667
672
// Among other uses, this allows to apply a dial timeout.
668
673
func DialWithDialerTLS (dialer Dialer , addr string , tlsConfig * tls.Config ) (* Client , error ) {
674
+ return DialWithDialerAndTimeoutTLS (dialer , addr , tlsConfig , 0 )
675
+ }
676
+
677
+ func DialWithDialerAndTimeoutTLS (dialer Dialer , addr string , tlsConfig * tls.Config , timeout time.Duration ) (* Client , error ) {
669
678
conn , err := dialer .Dial ("tcp" , addr )
670
679
if err != nil {
671
680
return nil , err
@@ -685,13 +694,14 @@ func DialWithDialerTLS(dialer Dialer, addr string, tlsConfig *tls.Config) (*Clie
685
694
// there is no way to set the client's Timeout for that action. As a
686
695
// workaround, if the dialer has a timeout set, use that for the connection's
687
696
// deadline.
688
- var timeout time.Duration
689
- if netDialer , ok := dialer .(* net.Dialer ); ok && netDialer .Timeout > 0 {
690
- err := tlsConn .SetDeadline (time .Now ().Add (netDialer .Timeout ))
691
- if err != nil {
692
- return nil , err
697
+ if timeout == 0 {
698
+ if netDialer , ok := dialer .(* net.Dialer ); ok && netDialer .Timeout > 0 {
699
+ timeout = netDialer .Timeout
693
700
}
694
- timeout = netDialer .Timeout
701
+ }
702
+ err = conn .SetDeadline (time .Now ().Add (timeout ))
703
+ if err != nil {
704
+ return nil , err
695
705
}
696
706
697
707
c , err := NewWithTimeout (tlsConn , timeout )
0 commit comments