1
0
forked from rosa/hakurei

internal/netlink: isolate receive method

This enables use with epoll for receiving events only.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-03-23 15:03:15 +09:00
parent f7bfa9a6c2
commit d8648304bb

View File

@@ -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