@@ -536,7 +536,7 @@ func (c *DnsController) handle_(
536536 if err != nil {
537537 return fmt .Errorf ("pack DNS packet: %w" , err )
538538 }
539- return c .dialSend (0 , req , data , dnsMessage .Id , upstream , needResp )
539+ return c .dialSend (context . Background (), 0 , req , data , dnsMessage .Id , upstream , needResp )
540540}
541541
542542// sendReject_ send empty answer.
@@ -562,7 +562,7 @@ func (c *DnsController) sendReject_(dnsMessage *dnsmessage.Msg, req *udpRequest)
562562 return nil
563563}
564564
565- func (c * DnsController ) dialSend (invokingDepth int , req * udpRequest , data []byte , id uint16 , upstream * dns.Upstream , needResp bool ) (err error ) {
565+ func (c * DnsController ) dialSend (ctx context. Context , invokingDepth int , req * udpRequest , data []byte , id uint16 , upstream * dns.Upstream , needResp bool ) (err error ) {
566566 if invokingDepth >= MaxDnsLookupDepth {
567567 return fmt .Errorf ("too deep DNS lookup invoking (depth: %v); there may be infinite loop in your DNS response routing" , MaxDnsLookupDepth )
568568 }
@@ -607,7 +607,7 @@ func (c *DnsController) dialSend(invokingDepth int, req *udpRequest, data []byte
607607 // We should set a connClosed flag to avoid it.
608608 var connClosed bool
609609
610- ctxDial , cancel := context .WithTimeout (context . TODO () , consts .DefaultDialTimeout )
610+ ctxDial , cancel := context .WithTimeout (ctx , consts .DefaultDialTimeout )
611611 defer cancel ()
612612
613613 // get forwarder from cache
@@ -632,10 +632,6 @@ func (c *DnsController) dialSend(invokingDepth int, req *udpRequest, data []byte
632632 }
633633 }()
634634
635- if err != nil {
636- return err
637- }
638-
639635 respMsg , err = forwarder .ForwardDNS (ctxDial , data )
640636 if err != nil {
641637 if c .timeoutExceedCallback != nil && isTimeoutError (err ) {
@@ -644,7 +640,7 @@ func (c *DnsController) dialSend(invokingDepth int, req *udpRequest, data []byte
644640 if fallbackDialArgument := tcpFallbackDialArgument (upstream , dialArgument , err ); fallbackDialArgument != nil {
645641 fallbackForwarder , fallbackErr := newDnsForwarder (upstream , * fallbackDialArgument )
646642 if fallbackErr != nil {
647- return err
643+ return fmt . Errorf ( "tcp fallback forwarder creation failed: %w (original: %v)" , fallbackErr , err )
648644 }
649645 defer fallbackForwarder .Close ()
650646 respMsg , fallbackErr = fallbackForwarder .ForwardDNS (ctxDial , data )
@@ -702,7 +698,7 @@ func (c *DnsController) dialSend(invokingDepth int, req *udpRequest, data []byte
702698 "next_upstream" : nextUpstream .String (),
703699 }).Traceln ("Change DNS upstream and resend" )
704700 }
705- return c .dialSend (invokingDepth + 1 , req , data , id , nextUpstream , needResp )
701+ return c .dialSend (ctx , invokingDepth + 1 , req , data , id , nextUpstream , needResp )
706702 }
707703 if upstreamIndex .IsReserved () && c .log .IsLevelEnabled (logrus .InfoLevel ) {
708704 var (
0 commit comments