@@ -629,6 +629,10 @@ type Dialer interface {
629629// 
630630// Among other uses, this allows to apply a dial timeout. 
631631func  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 ) {
632636	conn , err  :=  dialer .Dial ("tcp" , addr )
633637	if  err  !=  nil  {
634638		return  nil , err 
@@ -638,13 +642,16 @@ func DialWithDialer(dialer Dialer, addr string) (*Client, error) {
638642	// there is no way to set the client's Timeout for that action. As a 
639643	// workaround, if the dialer has a timeout set, use that for the connection's 
640644	// 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 ))
645+ 	if  timeout  ==  0  {
646+ 		if  netDialer , ok  :=  dialer .(* net.Dialer ); ok  &&  netDialer .Timeout  >  0  {
647+ 			timeout  =  netDialer .Timeout 
648+ 		}
649+ 	}
650+ 	if  timeout  >  0  {
651+ 		err  =  conn .SetDeadline (time .Now ().Add (timeout ))
644652		if  err  !=  nil  {
645653			return  nil , err 
646654		}
647- 		timeout  =  netDialer .Timeout 
648655	}
649656
650657	c , err  :=  NewWithTimeout (conn , timeout )
@@ -666,6 +673,10 @@ func DialTLS(addr string, tlsConfig *tls.Config) (*Client, error) {
666673// 
667674// Among other uses, this allows to apply a dial timeout. 
668675func  DialWithDialerTLS (dialer  Dialer , addr  string , tlsConfig  * tls.Config ) (* Client , error ) {
676+ 	return  DialWithDialerAndTimeoutTLS (dialer , addr , tlsConfig , 0 )
677+ }
678+ 
679+ func  DialWithDialerAndTimeoutTLS (dialer  Dialer , addr  string , tlsConfig  * tls.Config , timeout  time.Duration ) (* Client , error ) {
669680	conn , err  :=  dialer .Dial ("tcp" , addr )
670681	if  err  !=  nil  {
671682		return  nil , err 
@@ -685,13 +696,16 @@ func DialWithDialerTLS(dialer Dialer, addr string, tlsConfig *tls.Config) (*Clie
685696	// there is no way to set the client's Timeout for that action. As a 
686697	// workaround, if the dialer has a timeout set, use that for the connection's 
687698	// 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 ))
699+ 	if  timeout  ==  0  {
700+ 		if  netDialer , ok  :=  dialer .(* net.Dialer ); ok  &&  netDialer .Timeout  >  0  {
701+ 			timeout  =  netDialer .Timeout 
702+ 		}
703+ 	}
704+ 	if  timeout  >  0  {
705+ 		err  =  conn .SetDeadline (time .Now ().Add (timeout ))
691706		if  err  !=  nil  {
692707			return  nil , err 
693708		}
694- 		timeout  =  netDialer .Timeout 
695709	}
696710
697711	c , err  :=  NewWithTimeout (tlsConn , timeout )
0 commit comments