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