Skip to content

Commit 6b68042

Browse files
authoredJun 25, 2023
Use timeout in TCPDialer to resolveTCPAddrs (#1582)
1 parent ffdf59d commit 6b68042

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed
 

‎tcpdialer.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,8 @@ func (d *TCPDialer) dial(addr string, dualStack bool, timeout time.Duration) (ne
280280
go d.tcpAddrsClean()
281281
})
282282

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

292293
var conn net.Conn
293294
n := uint32(len(addrs))
294-
deadline := time.Now().Add(timeout)
295295
for n > 0 {
296296
conn, err = d.tryDial(network, &addrs[idx%n], deadline, d.concurrencyCh)
297297
if err == nil {
@@ -379,7 +379,7 @@ func (d *TCPDialer) tcpAddrsClean() {
379379
}
380380
}
381381

382-
func (d *TCPDialer) getTCPAddrs(addr string, dualStack bool) ([]net.TCPAddr, uint32, error) {
382+
func (d *TCPDialer) getTCPAddrs(addr string, dualStack bool, deadline time.Time) ([]net.TCPAddr, uint32, error) {
383383
item, exist := d.tcpAddrsMap.Load(addr)
384384
e, ok := item.(*tcpAddrEntry)
385385
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
390390
}
391391

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

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

429-
ctx := context.Background()
429+
ctx, cancel := context.WithDeadline(context.Background(), deadline)
430+
defer cancel()
430431
ipaddrs, err := resolver.LookupIPAddr(ctx, host)
431432
if err != nil {
432433
return nil, err

0 commit comments

Comments
 (0)
Please sign in to comment.