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:
@@ -156,9 +156,18 @@ func (c *conn) Roundtrip(f func(msg *syscall.NetlinkMessage) error) error {
|
|||||||
return os.NewSyscallError("sendto", err)
|
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 {
|
for {
|
||||||
buf := c.buf
|
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)
|
return os.NewSyscallError("recvfrom", err)
|
||||||
} else if n < syscall.NLMSG_HDRLEN {
|
} else if n < syscall.NLMSG_HDRLEN {
|
||||||
return syscall.EBADE
|
return syscall.EBADE
|
||||||
|
|||||||
Reference in New Issue
Block a user