mirror of
https://github.com/golang/go
synced 2024-09-05 16:04:50 +00:00
net: pass MSG_CMSG_CLOEXEC in ReadMsgUnix on dragonfly, netbsd and openbsd
Add support for passing MSG_CMSG_CLOEXEC to the recvmsg syscall on dragonfly, netbsd and openbsd. MSG_CMSG_CLOEXEC on freebsd is currently broken, see https://reviews.freebsd.org/D29328. Change-Id: Ie4c6e3cb550cd0ae32a1c2acca12edf77569e96a Reviewed-on: https://go-review.googlesource.com/c/go/+/311570 Trust: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
3f8e64878a
commit
57b0d838ed
|
@ -114,7 +114,7 @@ func (c *UnixConn) readFrom(b []byte) (int, *UnixAddr, error) {
|
|||
func (c *UnixConn) readMsg(b, oob []byte) (n, oobn, flags int, addr *UnixAddr, err error) {
|
||||
var sa syscall.Sockaddr
|
||||
n, oobn, flags, sa, err = c.fd.readMsg(b, oob, readMsgFlags)
|
||||
if oobn > 0 {
|
||||
if readMsgFlags == 0 && err == nil && oobn > 0 {
|
||||
setReadMsgCloseOnExec(oob[:oobn])
|
||||
}
|
||||
|
||||
|
|
|
@ -2,14 +2,12 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd || solaris
|
||||
// +build aix darwin dragonfly freebsd netbsd openbsd solaris
|
||||
//go:build aix || darwin || freebsd || solaris
|
||||
// +build aix darwin freebsd solaris
|
||||
|
||||
package net
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
)
|
||||
import "syscall"
|
||||
|
||||
const readMsgFlags = 0
|
||||
|
|
@ -2,16 +2,13 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build linux
|
||||
// +build linux
|
||||
//go:build dragonfly || linux || netbsd || openbsd
|
||||
// +build dragonfly linux netbsd openbsd
|
||||
|
||||
package net
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
)
|
||||
import "syscall"
|
||||
|
||||
const readMsgFlags = syscall.MSG_CMSG_CLOEXEC
|
||||
|
||||
func setReadMsgCloseOnExec(oob []byte) {
|
||||
}
|
||||
func setReadMsgCloseOnExec(oob []byte) {}
|
|
@ -9,5 +9,4 @@ package net
|
|||
|
||||
const readMsgFlags = 0
|
||||
|
||||
func setReadMsgCloseOnExec(oob []byte) {
|
||||
}
|
||||
func setReadMsgCloseOnExec(oob []byte) {}
|
||||
|
|
|
@ -850,6 +850,7 @@ const (
|
|||
MAP_VPAGETABLE = 0x2000
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MSG_CMSG_CLOEXEC = 0x1000
|
||||
MSG_CTRUNC = 0x20
|
||||
MSG_DONTROUTE = 0x4
|
||||
MSG_DONTWAIT = 0x80
|
||||
|
|
|
@ -891,6 +891,7 @@ const (
|
|||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MSG_BCAST = 0x100
|
||||
MSG_CMSG_CLOEXEC = 0x800
|
||||
MSG_CTRUNC = 0x20
|
||||
MSG_DONTROUTE = 0x4
|
||||
MSG_DONTWAIT = 0x80
|
||||
|
|
|
@ -891,6 +891,7 @@ const (
|
|||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MSG_BCAST = 0x100
|
||||
MSG_CMSG_CLOEXEC = 0x800
|
||||
MSG_CTRUNC = 0x20
|
||||
MSG_DONTROUTE = 0x4
|
||||
MSG_DONTWAIT = 0x80
|
||||
|
|
Loading…
Reference in a new issue