forked from rosa/hakurei
internal/netlink: optional recvmsg without netpoll
For draining the socket receive buffer. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -135,6 +135,23 @@ func (c *Conn) Recvmsg(
|
|||||||
|
|
||||||
var n int
|
var n int
|
||||||
data = c.buf[:]
|
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)
|
done := make(chan error, 1)
|
||||||
go func() {
|
go func() {
|
||||||
rcErr := c.raw.Read(func(fd uintptr) (done bool) {
|
rcErr := c.raw.Read(func(fd uintptr) (done bool) {
|
||||||
|
|||||||
Reference in New Issue
Block a user