From a854719b9f11fea48e7221eeff50d4cdb3801052 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Mon, 30 Mar 2026 23:18:43 +0900 Subject: [PATCH] internal/netlink: optional recvmsg without netpoll For draining the socket receive buffer. Signed-off-by: Ophestra --- internal/netlink/netlink.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/internal/netlink/netlink.go b/internal/netlink/netlink.go index 6cd15610..2b7e8704 100644 --- a/internal/netlink/netlink.go +++ b/internal/netlink/netlink.go @@ -135,6 +135,23 @@ func (c *Conn) Recvmsg( var n int data = c.buf[:] + + if ctx == nil { + rcErr := c.raw.Control(func(fd uintptr) { + n, _, recvflags, from, err = syscall.Recvmsg(int(fd), data, nil, flags) + }) + if n >= 0 { + data = data[:n] + } + + if err != nil { + err = os.NewSyscallError("recvmsg", err) + } else { + err = rcErr + } + return + } + done := make(chan error, 1) go func() { rcErr := c.raw.Read(func(fd uintptr) (done bool) {