From 5533094984a5c754ab8a18f6f1008dc5ec2c4be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Sat, 12 Jul 2025 22:53:01 +0800 Subject: [PATCH] Fix UDP DNS buffer size --- dns/transport/udp.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/dns/transport/udp.go b/dns/transport/udp.go index a9c1d4d9..48924c65 100644 --- a/dns/transport/udp.go +++ b/dns/transport/udp.go @@ -60,7 +60,7 @@ func NewUDPRaw(logger logger.ContextLogger, adapter dns.TransportAdapter, dialer logger: logger, dialer: dialer, serverAddr: serverAddr, - udpSize: 512, + udpSize: 2048, tcpTransport: &TCPTransport{ dialer: dialer, serverAddr: serverAddr, @@ -97,15 +97,19 @@ func (t *UDPTransport) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.M } func (t *UDPTransport) exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, error) { - conn, err := t.open(ctx) - if err != nil { - return nil, err - } + t.access.Lock() if edns0Opt := message.IsEdns0(); edns0Opt != nil { if udpSize := int(edns0Opt.UDPSize()); udpSize > t.udpSize { t.udpSize = udpSize + close(t.done) + t.done = make(chan struct{}) } } + t.access.Unlock() + conn, err := t.open(ctx) + if err != nil { + return nil, err + } buffer := buf.NewSize(1 + message.Len()) defer buffer.Release() exMessage := *message