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 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
|
||||
|
||||
Reference in New Issue
Block a user