diff options
author | un000 <un000@users.noreply.github.com> | 2023-06-25 18:13:07 +0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-25 16:13:07 +0200 |
commit | 6b68042b6c9da984ab5c47b2ebcb6fdfb32a5a83 (patch) | |
tree | ca1aeaaf9c99ffc828067220e53d342b2257afe1 /tcpdialer.go | |
parent | Enable gofumpt linter; format code `gofumpt -w .` (#1576) (diff) | |
download | fasthttp-6b68042b6c9da984ab5c47b2ebcb6fdfb32a5a83.tar.gz fasthttp-6b68042b6c9da984ab5c47b2ebcb6fdfb32a5a83.tar.bz2 fasthttp-6b68042b6c9da984ab5c47b2ebcb6fdfb32a5a83.zip |
Use timeout in TCPDialer to resolveTCPAddrs (#1582)
Diffstat (limited to 'tcpdialer.go')
-rw-r--r-- | tcpdialer.go | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/tcpdialer.go b/tcpdialer.go index d62bfe7..5c7531e 100644 --- a/tcpdialer.go +++ b/tcpdialer.go @@ -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 } @@ -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 { @@ -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 { @@ -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) @@ -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 @@ -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 |