@@ -280,7 +280,8 @@ func (d *TCPDialer) dial(addr string, dualStack bool, timeout time.Duration) (ne
280
280
go d .tcpAddrsClean ()
281
281
})
282
282
283
- addrs , idx , err := d .getTCPAddrs (addr , dualStack )
283
+ deadline := time .Now ().Add (timeout )
284
+ addrs , idx , err := d .getTCPAddrs (addr , dualStack , deadline )
284
285
if err != nil {
285
286
return nil , err
286
287
}
@@ -291,7 +292,6 @@ func (d *TCPDialer) dial(addr string, dualStack bool, timeout time.Duration) (ne
291
292
292
293
var conn net.Conn
293
294
n := uint32 (len (addrs ))
294
- deadline := time .Now ().Add (timeout )
295
295
for n > 0 {
296
296
conn , err = d .tryDial (network , & addrs [idx % n ], deadline , d .concurrencyCh )
297
297
if err == nil {
@@ -379,7 +379,7 @@ func (d *TCPDialer) tcpAddrsClean() {
379
379
}
380
380
}
381
381
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 ) {
383
383
item , exist := d .tcpAddrsMap .Load (addr )
384
384
e , ok := item .(* tcpAddrEntry )
385
385
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
390
390
}
391
391
392
392
if e == nil {
393
- addrs , err := resolveTCPAddrs (addr , dualStack , d .Resolver )
393
+ addrs , err := resolveTCPAddrs (addr , dualStack , d .Resolver , deadline )
394
394
if err != nil {
395
395
item , exist := d .tcpAddrsMap .Load (addr )
396
396
e , ok = item .(* tcpAddrEntry )
@@ -412,7 +412,7 @@ func (d *TCPDialer) getTCPAddrs(addr string, dualStack bool) ([]net.TCPAddr, uin
412
412
return e .addrs , idx , nil
413
413
}
414
414
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 ) {
416
416
host , portS , err := net .SplitHostPort (addr )
417
417
if err != nil {
418
418
return nil , err
@@ -426,7 +426,8 @@ func resolveTCPAddrs(addr string, dualStack bool, resolver Resolver) ([]net.TCPA
426
426
resolver = net .DefaultResolver
427
427
}
428
428
429
- ctx := context .Background ()
429
+ ctx , cancel := context .WithDeadline (context .Background (), deadline )
430
+ defer cancel ()
430
431
ipaddrs , err := resolver .LookupIPAddr (ctx , host )
431
432
if err != nil {
432
433
return nil , err
0 commit comments