// Copyright 2013 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.// This file implements sysSocket for platforms that provide a fast path for// setting SetNonblock and CloseOnExec.//go:build dragonfly || freebsd || linux || netbsd || openbsd || solarispackage netimport ()// Wrapper around the socket system call that marks the returned file// descriptor as nonblocking and close-on-exec.func (, , int) (int, error) { , := socketFunc(, |syscall.SOCK_NONBLOCK|syscall.SOCK_CLOEXEC, )// TODO: We can remove the fallback on Linux and *BSD, // as currently supported versions all support accept4 // with SOCK_CLOEXEC, but Solaris does not. See issue #59359.switch {casenil:return , nildefault:return -1, os.NewSyscallError("socket", )casesyscall.EPROTONOSUPPORT, syscall.EINVAL: }// See ../syscall/exec_unix.go for description of ForkLock.syscall.ForkLock.RLock() , = socketFunc(, , )if == nil {syscall.CloseOnExec() }syscall.ForkLock.RUnlock()if != nil {return -1, os.NewSyscallError("socket", ) }if = syscall.SetNonblock(, true); != nil {poll.CloseFunc()return -1, os.NewSyscallError("setnonblock", ) }return , nil}
The pages are generated with Goldsv0.6.7. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds.