From 0864852d3322f905153697b0a01d01077469829d Mon Sep 17 00:00:00 2001 From: Ryan Huber Date: Tue, 4 Nov 2025 04:39:07 +0000 Subject: [PATCH] updated bind --- wgstack/conn/bind_std.go | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/wgstack/conn/bind_std.go b/wgstack/conn/bind_std.go index 33c6c1c..1d063a8 100644 --- a/wgstack/conn/bind_std.go +++ b/wgstack/conn/bind_std.go @@ -456,7 +456,19 @@ func (s *StdNetBind) send4(conn *net.UDPConn, pc *ipv4.PacketConn, ep Endpoint, if runtime.GOOS == "linux" && pc != nil { for { n, err = pc.WriteBatch((*msgs)[start:len(bufs)], 0) - if err != nil || n == len((*msgs)[start:len(bufs)]) { + if err != nil { + if errors.Is(err, syscall.EAFNOSUPPORT) { + for j := start; j < len(bufs); j++ { + _, _, werr := conn.WriteMsgUDP(bufs[j], (*msgs)[j].OOB, ua) + if werr != nil { + err = werr + break + } + } + } + break + } + if n == len((*msgs)[start:len(bufs)]) { break } start += n @@ -494,7 +506,19 @@ func (s *StdNetBind) send6(conn *net.UDPConn, pc *ipv6.PacketConn, ep Endpoint, if runtime.GOOS == "linux" && pc != nil { for { n, err = pc.WriteBatch((*msgs)[start:len(bufs)], 0) - if err != nil || n == len((*msgs)[start:len(bufs)]) { + if err != nil { + if errors.Is(err, syscall.EAFNOSUPPORT) { + for j := start; j < len(bufs); j++ { + _, _, werr := conn.WriteMsgUDP(bufs[j], (*msgs)[j].OOB, ua) + if werr != nil { + err = werr + break + } + } + } + break + } + if n == len((*msgs)[start:len(bufs)]) { break } start += n