From e42b818c2a5b8a27a453981f2c12073436b7da73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Thu, 11 Sep 2025 20:57:57 +0800 Subject: [PATCH] Fix dhcp fetch --- dns/transport/dhcp/dhcp.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/dns/transport/dhcp/dhcp.go b/dns/transport/dhcp/dhcp.go index b56a60e7b..f55d547e0 100644 --- a/dns/transport/dhcp/dhcp.go +++ b/dns/transport/dhcp/dhcp.go @@ -2,10 +2,13 @@ package dhcp import ( "context" + "errors" + "io" "net" "runtime" "strings" "sync" + "syscall" "time" "github.com/sagernet/sing-box/adapter" @@ -195,7 +198,17 @@ func (t *Transport) fetchServers0(ctx context.Context, iface *control.Interface) if runtime.GOOS == "linux" || runtime.GOOS == "android" { listenAddr = "255.255.255.255:68" } - packetConn, err := listener.ListenPacket(t.ctx, "udp4", listenAddr) + var ( + packetConn net.PacketConn + err error + ) + for i := 0; i < 5; i++ { + packetConn, err = listener.ListenPacket(t.ctx, "udp4", listenAddr) + if err == nil || !errors.Is(err, syscall.EADDRINUSE) { + break + } + time.Sleep(time.Second) + } if err != nil { return err } @@ -232,6 +245,9 @@ func (t *Transport) fetchServersResponse(iface *control.Interface, packetConn ne for { _, _, err := buffer.ReadPacketFrom(packetConn) if err != nil { + if errors.Is(err, io.ErrShortBuffer) { + continue + } return err }