Set deadline for custom UDP/TCP conn

Otherwise, OS resolver may hang forever if the server does not reply.

While at it, also removing unused method stopClientInfoDiscover.

Updates #344
This commit is contained in:
Cuong Manh Le
2025-02-06 15:16:32 +07:00
committed by Cuong Manh Le
parent cf6d16b439
commit 1c50c2b6af
2 changed files with 2 additions and 7 deletions

View File

@@ -581,13 +581,6 @@ func (p *prog) runClientInfoDiscover(ctx context.Context) {
}()
}
// stopClientInfoDiscover stops the current client info discover goroutine.
// It blocks until the goroutine terminated.
func (p *prog) stopClientInfoDiscover() {
p.ciTable.Stop()
mainLog.Load().Debug().Msg("stopped client info discover")
}
// metricsEnabled reports whether prometheus exporter is enabled/disabled.
func (p *prog) metricsEnabled() bool {
return p.cfg.Service.MetricsQueryStats || p.cfg.Service.MetricsListener != ""

View File

@@ -289,6 +289,7 @@ func customDNSExchange(ctx context.Context, msg *dns.Msg, server string, desired
return nil, err
}
defer udpConn.Close()
udpConn.SetDeadline(time.Now().Add(3 * time.Second))
udpDnsConn := &dns.Conn{Conn: udpConn}
if err = udpDnsConn.WriteMsg(msg); err != nil {
return nil, err
@@ -310,6 +311,7 @@ func customDNSExchange(ctx context.Context, msg *dns.Msg, server string, desired
return reply, nil // fallback to UDP reply if TCP dial fails.
}
defer tcpConn.Close()
tcpConn.SetDeadline(time.Now().Add(3 * time.Second))
tcpDnsConn := &dns.Conn{Conn: tcpConn}
if err = tcpDnsConn.WriteMsg(msg); err != nil {
return reply, nil // fallback if TCP write fails.