aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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