internal/netlink: optional recvmsg without netpoll
All checks were successful
Test / Create distribution (push) Successful in 1m14s
Test / Sandbox (push) Successful in 3m7s
Test / Hakurei (push) Successful in 4m10s
Test / ShareFS (push) Successful in 4m22s
Test / Sandbox (race detector) (push) Successful in 5m34s
Test / Hakurei (race detector) (push) Successful in 6m39s
Test / Flake checks (push) Successful in 1m25s
All checks were successful
Test / Create distribution (push) Successful in 1m14s
Test / Sandbox (push) Successful in 3m7s
Test / Hakurei (push) Successful in 4m10s
Test / ShareFS (push) Successful in 4m22s
Test / Sandbox (race detector) (push) Successful in 5m34s
Test / Hakurei (race detector) (push) Successful in 6m39s
Test / Flake checks (push) Successful in 1m25s
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