diff --git a/dnsclient.go b/dnsclient.go index 7753cf38..8888fd0f 100644 --- a/dnsclient.go +++ b/dnsclient.go @@ -3,6 +3,7 @@ package rdns import ( "crypto/tls" "net" + "time" "github.com/miekg/dns" "github.com/sirupsen/logrus" @@ -20,6 +21,10 @@ type DNSClient struct { type DNSClientOptions struct { // Local IP to use for outbound connections. If nil, a local address is chosen. LocalAddr net.IP + + // Timeout is the maximum amount of time a dial will wait for + // a connect to complete. + Timeout time.Duration } var _ Resolver = &DNSClient{} @@ -30,14 +35,13 @@ func NewDNSClient(id, endpoint, network string, opt DNSClientOptions) (*DNSClien if err := validEndpoint(endpoint); err != nil { return nil, err } - // Use a custom dialer if a local address was provided - var dialer *net.Dialer + dialer := &net.Dialer{Timeout: opt.Timeout} if opt.LocalAddr != nil { switch network { case "tcp": - dialer = &net.Dialer{LocalAddr: &net.TCPAddr{IP: opt.LocalAddr}} + dialer.LocalAddr = &net.TCPAddr{IP: opt.LocalAddr} case "udp": - dialer = &net.Dialer{LocalAddr: &net.UDPAddr{IP: opt.LocalAddr}} + dialer.LocalAddr = &net.UDPAddr{IP: opt.LocalAddr} } } diff --git a/dohclient.go b/dohclient.go index 0850a0ec..25328acb 100644 --- a/dohclient.go +++ b/dohclient.go @@ -36,6 +36,10 @@ type DoHClientOptions struct { // Local IP to use for outbound connections. If nil, a local address is chosen. LocalAddr net.IP + // Timeout is the maximum amount of time a dial will wait for + // a connect to complete. + Timeout time.Duration + TLSConfig *tls.Config } diff --git a/dotclient.go b/dotclient.go index be1a0f9b..da984878 100644 --- a/dotclient.go +++ b/dotclient.go @@ -3,6 +3,7 @@ package rdns import ( "crypto/tls" "net" + "time" "github.com/miekg/dns" "github.com/pkg/errors" @@ -26,6 +27,10 @@ type DoTClientOptions struct { // Local IP to use for outbound connections. If nil, a local address is chosen. LocalAddr net.IP + // Timeout is the maximum amount of time a dial will wait for + // a connect to complete. + Timeout time.Duration + TLSConfig *tls.Config } @@ -37,10 +42,9 @@ func NewDoTClient(id, endpoint string, opt DoTClientOptions) (*DoTClient, error) return nil, err } - // Use a custom dialer if a local address was provided - var dialer *net.Dialer + dialer := &net.Dialer{Timeout: opt.Timeout} if opt.LocalAddr != nil { - dialer = &net.Dialer{LocalAddr: &net.TCPAddr{IP: opt.LocalAddr}} + dialer.LocalAddr = &net.TCPAddr{IP: opt.LocalAddr} } client := &dns.Client{ Net: "tcp-tls",