From d8648304bb4208593be0c48b8b1b26c1caa8b3ea Mon Sep 17 00:00:00 2001 From: Ophestra Date: Mon, 23 Mar 2026 15:03:15 +0900 Subject: [PATCH] internal/netlink: isolate receive method This enables use with epoll for receiving events only. Signed-off-by: Ophestra --- internal/netlink/netlink.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/netlink/netlink.go b/internal/netlink/netlink.go index d1260c84..e6f6fa26 100644 --- a/internal/netlink/netlink.go +++ b/internal/netlink/netlink.go @@ -156,9 +156,18 @@ func (c *conn) Roundtrip(f func(msg *syscall.NetlinkMessage) error) error { return os.NewSyscallError("sendto", err) } + return c.receive(f, 0) +} + +// receive receives from a socket with specified flags until a non-nil error is +// returned by f. An error of type [Complete] is returned as nil. +func (c *conn) receive( + f func(msg *syscall.NetlinkMessage) error, + flags int, +) error { for { buf := c.buf - if n, _, err := syscall.Recvfrom(c.fd, buf, 0); err != nil { + if n, _, err := syscall.Recvfrom(c.fd, buf, flags); err != nil { return os.NewSyscallError("recvfrom", err) } else if n < syscall.NLMSG_HDRLEN { return syscall.EBADE