diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-03-30 23:18:43 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-03-30 23:18:43 +0900 |
| commit | a854719b9f11fea48e7221eeff50d4cdb3801052 (patch) | |
| tree | 953e4369fcf4582a0744ca036a065400dad3362b /internal/netlink | |
| parent | f03c0fb249ea8787ae8ec086970eb089109ebf6f (diff) | |
internal/netlink: optional recvmsg without netpoll
For draining the socket receive buffer.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/netlink')
| -rw-r--r-- | internal/netlink/netlink.go | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/internal/netlink/netlink.go b/internal/netlink/netlink.go index 6cd15610..2b7e8704 100644 --- a/internal/netlink/netlink.go +++ b/internal/netlink/netlink.go @@ -135,6 +135,23 @@ func (c *Conn) Recvmsg( var n int data = c.buf[:] + + if ctx == nil { + rcErr := c.raw.Control(func(fd uintptr) { + n, _, recvflags, from, err = syscall.Recvmsg(int(fd), data, nil, flags) + }) + if n >= 0 { + data = data[:n] + } + + if err != nil { + err = os.NewSyscallError("recvmsg", err) + } else { + err = rcErr + } + return + } + done := make(chan error, 1) go func() { rcErr := c.raw.Read(func(fd uintptr) (done bool) { |
