Skip to content

Commit 68dd0ca

Browse files
author
doganpoyraz
committed
Pass explicit timeout for custom dialers
1 parent 8b2892f commit 68dd0ca

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

client/client.go

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,10 @@ type Dialer interface {
629629
//
630630
// Among other uses, this allows to apply a dial timeout.
631631
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) {
632636
conn, err := dialer.Dial("tcp", addr)
633637
if err != nil {
634638
return nil, err
@@ -638,13 +642,14 @@ 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))
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
646648
}
647-
timeout = netDialer.Timeout
649+
}
650+
err = conn.SetDeadline(time.Now().Add(timeout))
651+
if err != nil {
652+
return nil, err
648653
}
649654

650655
c, err := NewWithTimeout(conn, timeout)
@@ -666,6 +671,10 @@ func DialTLS(addr string, tlsConfig *tls.Config) (*Client, error) {
666671
//
667672
// Among other uses, this allows to apply a dial timeout.
668673
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) {
669678
conn, err := dialer.Dial("tcp", addr)
670679
if err != nil {
671680
return nil, err
@@ -685,13 +694,14 @@ func DialWithDialerTLS(dialer Dialer, addr string, tlsConfig *tls.Config) (*Clie
685694
// there is no way to set the client's Timeout for that action. As a
686695
// workaround, if the dialer has a timeout set, use that for the connection's
687696
// 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
693700
}
694-
timeout = netDialer.Timeout
701+
}
702+
err = conn.SetDeadline(time.Now().Add(timeout))
703+
if err != nil {
704+
return nil, err
695705
}
696706

697707
c, err := NewWithTimeout(tlsConn, timeout)

0 commit comments

Comments
 (0)