github.com/mtsmfm/go/src@v0.0.0-20221020090648-44bdcb9f8fde/net/unixsock_readmsg_cloexec.go (about) 1 // Copyright 2021 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build aix || darwin || freebsd || solaris 6 7 package net 8 9 import "syscall" 10 11 const readMsgFlags = 0 12 13 func setReadMsgCloseOnExec(oob []byte) { 14 scms, err := syscall.ParseSocketControlMessage(oob) 15 if err != nil { 16 return 17 } 18 19 for _, scm := range scms { 20 if scm.Header.Level == syscall.SOL_SOCKET && scm.Header.Type == syscall.SCM_RIGHTS { 21 fds, err := syscall.ParseUnixRights(&scm) 22 if err != nil { 23 continue 24 } 25 for _, fd := range fds { 26 syscall.CloseOnExec(fd) 27 } 28 } 29 } 30 }