aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/syscall_openbsd.go
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2018-02-26 14:58:05 +0000
committerTobias Klauser <tobias.klauser@gmail.com>2018-02-26 16:59:38 +0000
commit144bf04a2b0dea43e17fc9e745d3fa8885de11f7 (patch)
treef96fc4725e73fb190e45ccafd995687aa212bb59 /src/syscall/syscall_openbsd.go
parentdb7af2e67b023da2c4e8c1cc49543ebf4566ce52 (diff)
downloadgo-144bf04a2b0dea43e17fc9e745d3fa8885de11f7.tar.xz
net, internal/poll, net/internal/socktest: use SOCK_{CLOEXEC,NONBLOCK} accept4/socket flags on OpenBSD
The SOCK_CLOEXEC and SOCK_NONBLOCK flags to the socket syscall and the accept4 syscall are supported since OpenBSD 5.7. Follows CL 40895 and CL 94295 Change-Id: Icaf35ace2ef5e73279a70d4f1a9fbf3be9371e6c Reviewed-on: https://go-review.googlesource.com/97196 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/syscall/syscall_openbsd.go')
-rw-r--r--src/syscall/syscall_openbsd.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/syscall/syscall_openbsd.go b/src/syscall/syscall_openbsd.go
index d65e6a51fe..1a9b7644a9 100644
--- a/src/syscall/syscall_openbsd.go
+++ b/src/syscall/syscall_openbsd.go
@@ -74,6 +74,25 @@ func Pipe(p []int) (err error) {
return
}
+//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)
+func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
+ var rsa RawSockaddrAny
+ var len _Socklen = SizeofSockaddrAny
+ nfd, err = accept4(fd, &rsa, &len, flags)
+ if err != nil {
+ return
+ }
+ if len > SizeofSockaddrAny {
+ panic("RawSockaddrAny too small")
+ }
+ sa, err = anyToSockaddr(&rsa)
+ if err != nil {
+ Close(nfd)
+ nfd = 0
+ }
+ return
+}
+
//sys getdents(fd int, buf []byte) (n int, err error)
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
return getdents(fd, buf)