Skip to content

Commit

Permalink
Use timeout in TCPDialer to resolveTCPAddrs (#1582)
Browse files Browse the repository at this point in the history
  • Loading branch information
un000 committed Jun 25, 2023
1 parent ffdf59d commit 6b68042
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions tcpdialer.go
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,8 @@ func (d *TCPDialer) dial(addr string, dualStack bool, timeout time.Duration) (ne
go d.tcpAddrsClean()
})

addrs, idx, err := d.getTCPAddrs(addr, dualStack)
deadline := time.Now().Add(timeout)
addrs, idx, err := d.getTCPAddrs(addr, dualStack, deadline)
if err != nil {
return nil, err
}
Expand All @@ -291,7 +292,6 @@ func (d *TCPDialer) dial(addr string, dualStack bool, timeout time.Duration) (ne

var conn net.Conn
n := uint32(len(addrs))
deadline := time.Now().Add(timeout)
for n > 0 {
conn, err = d.tryDial(network, &addrs[idx%n], deadline, d.concurrencyCh)
if err == nil {
Expand Down Expand Up @@ -379,7 +379,7 @@ func (d *TCPDialer) tcpAddrsClean() {
}
}

func (d *TCPDialer) getTCPAddrs(addr string, dualStack bool) ([]net.TCPAddr, uint32, error) {
func (d *TCPDialer) getTCPAddrs(addr string, dualStack bool, deadline time.Time) ([]net.TCPAddr, uint32, error) {
item, exist := d.tcpAddrsMap.Load(addr)
e, ok := item.(*tcpAddrEntry)
if exist && ok && e != nil && time.Since(e.resolveTime) > d.DNSCacheDuration {
Expand All @@ -390,7 +390,7 @@ func (d *TCPDialer) getTCPAddrs(addr string, dualStack bool) ([]net.TCPAddr, uin
}

if e == nil {
addrs, err := resolveTCPAddrs(addr, dualStack, d.Resolver)
addrs, err := resolveTCPAddrs(addr, dualStack, d.Resolver, deadline)
if err != nil {
item, exist := d.tcpAddrsMap.Load(addr)
e, ok = item.(*tcpAddrEntry)
Expand All @@ -412,7 +412,7 @@ func (d *TCPDialer) getTCPAddrs(addr string, dualStack bool) ([]net.TCPAddr, uin
return e.addrs, idx, nil
}

func resolveTCPAddrs(addr string, dualStack bool, resolver Resolver) ([]net.TCPAddr, error) {
func resolveTCPAddrs(addr string, dualStack bool, resolver Resolver, deadline time.Time) ([]net.TCPAddr, error) {
host, portS, err := net.SplitHostPort(addr)
if err != nil {
return nil, err
Expand All @@ -426,7 +426,8 @@ func resolveTCPAddrs(addr string, dualStack bool, resolver Resolver) ([]net.TCPA
resolver = net.DefaultResolver
}

ctx := context.Background()
ctx, cancel := context.WithDeadline(context.Background(), deadline)
defer cancel()
ipaddrs, err := resolver.LookupIPAddr(ctx, host)
if err != nil {
return nil, err
Expand Down

0 comments on commit 6b68042

Please sign in to comment.