aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-03-23 15:03:15 +0900
committerOphestra <cat@gensokyo.uk>2026-03-23 15:03:15 +0900
commitd8648304bb4208593be0c48b8b1b26c1caa8b3ea (patch)
tree1c7291aee6ce24a9aaa43a983e8c9ab923ebb943
parentf7bfa9a6c27b3f36e66548d7bdcb5b8d9cae6747 (diff)
internal/netlink: isolate receive method
This enables use with epoll for receiving events only. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/netlink/netlink.go11
1 files changed, 10 insertions, 1 deletions
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