mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +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) {
|
func (c *UnixConn) readMsg(b, oob []byte) (n, oobn, flags int, addr *UnixAddr, err error) {
|
||||||
var sa syscall.Sockaddr
|
var sa syscall.Sockaddr
|
||||||
n, oobn, flags, sa, err = c.fd.readMsg(b, oob, readMsgFlags)
|
n, oobn, flags, sa, err = c.fd.readMsg(b, oob, readMsgFlags)
|
||||||
if oobn > 0 {
|
if readMsgFlags == 0 && err == nil && oobn > 0 {
|
||||||
setReadMsgCloseOnExec(oob[:oobn])
|
setReadMsgCloseOnExec(oob[:oobn])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,14 +2,12 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd || solaris
|
//go:build aix || darwin || freebsd || solaris
|
||||||
// +build aix darwin dragonfly freebsd netbsd openbsd solaris
|
// +build aix darwin freebsd solaris
|
||||||
|
|
||||||
package net
|
package net
|
||||||
|
|
||||||
import (
|
import "syscall"
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
const readMsgFlags = 0
|
const readMsgFlags = 0
|
||||||
|
|
|
@ -2,16 +2,13 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux
|
//go:build dragonfly || linux || netbsd || openbsd
|
||||||
// +build linux
|
// +build dragonfly linux netbsd openbsd
|
||||||
|
|
||||||
package net
|
package net
|
||||||
|
|
||||||
import (
|
import "syscall"
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
const readMsgFlags = syscall.MSG_CMSG_CLOEXEC
|
const readMsgFlags = syscall.MSG_CMSG_CLOEXEC
|
||||||
|
|
||||||
func setReadMsgCloseOnExec(oob []byte) {
|
func setReadMsgCloseOnExec(oob []byte) {}
|
||||||
}
|
|
|
@ -9,5 +9,4 @@ package net
|
||||||
|
|
||||||
const readMsgFlags = 0
|
const readMsgFlags = 0
|
||||||
|
|
||||||
func setReadMsgCloseOnExec(oob []byte) {
|
func setReadMsgCloseOnExec(oob []byte) {}
|
||||||
}
|
|
||||||
|
|
|
@ -850,6 +850,7 @@ const (
|
||||||
MAP_VPAGETABLE = 0x2000
|
MAP_VPAGETABLE = 0x2000
|
||||||
MCL_CURRENT = 0x1
|
MCL_CURRENT = 0x1
|
||||||
MCL_FUTURE = 0x2
|
MCL_FUTURE = 0x2
|
||||||
|
MSG_CMSG_CLOEXEC = 0x1000
|
||||||
MSG_CTRUNC = 0x20
|
MSG_CTRUNC = 0x20
|
||||||
MSG_DONTROUTE = 0x4
|
MSG_DONTROUTE = 0x4
|
||||||
MSG_DONTWAIT = 0x80
|
MSG_DONTWAIT = 0x80
|
||||||
|
|
|
@ -891,6 +891,7 @@ const (
|
||||||
MCL_CURRENT = 0x1
|
MCL_CURRENT = 0x1
|
||||||
MCL_FUTURE = 0x2
|
MCL_FUTURE = 0x2
|
||||||
MSG_BCAST = 0x100
|
MSG_BCAST = 0x100
|
||||||
|
MSG_CMSG_CLOEXEC = 0x800
|
||||||
MSG_CTRUNC = 0x20
|
MSG_CTRUNC = 0x20
|
||||||
MSG_DONTROUTE = 0x4
|
MSG_DONTROUTE = 0x4
|
||||||
MSG_DONTWAIT = 0x80
|
MSG_DONTWAIT = 0x80
|
||||||
|
|
|
@ -891,6 +891,7 @@ const (
|
||||||
MCL_CURRENT = 0x1
|
MCL_CURRENT = 0x1
|
||||||
MCL_FUTURE = 0x2
|
MCL_FUTURE = 0x2
|
||||||
MSG_BCAST = 0x100
|
MSG_BCAST = 0x100
|
||||||
|
MSG_CMSG_CLOEXEC = 0x800
|
||||||
MSG_CTRUNC = 0x20
|
MSG_CTRUNC = 0x20
|
||||||
MSG_DONTROUTE = 0x4
|
MSG_DONTROUTE = 0x4
|
||||||
MSG_DONTWAIT = 0x80
|
MSG_DONTWAIT = 0x80
|
||||||
|
|
Loading…
Reference in a new issue