]> Cypherpunks.ru repositories - gostls13.git/commitdiff
syscall: add Accept4 and SOCK_{CLOEXEC,NONBLOCK} on dragonfly
authorMikio Hara <mikioh.mikioh@gmail.com>
Mon, 17 Apr 2017 20:05:25 +0000 (05:05 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Tue, 18 Apr 2017 03:55:27 +0000 (03:55 +0000)
This change just picks a few constants from DragonfFly BSD 4.6 kernel
and doesn't synchronize all the existing constants with the latest
DragonFly BSD kernels.

Updates #14222.

Change-Id: Ie107a8bee1a09393b3b42b6f82489532f5d13290
Reviewed-on: https://go-review.googlesource.com/40894
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/syscall/syscall_dragonfly.go
src/syscall/zerrors_dragonfly_amd64.go
src/syscall/zsyscall_dragonfly_amd64.go
src/syscall/zsysnum_dragonfly_amd64.go

index 054183adef2f230fa827b2d9a049b6eafeeb1139..6378dbbf96b653d0672ae3fed8ec1d571f58e6ab 100644 (file)
@@ -92,6 +92,24 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
        return extpwrite(fd, p, 0, offset)
 }
 
+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
+}
+
 func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
        var _p0 unsafe.Pointer
        var bufsize uintptr
@@ -192,6 +210,7 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
 //sys   munmap(addr uintptr, length uintptr) (err error)
 //sys  readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
 //sys  writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
+//sys  accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)
 
 /*
  * Unimplemented
index 15d300fd2da7589895b2e8274cd2c4b117b5b588..cf36c44d3c20eaa2ef4a2d6dfb759a348eeef3af 100644 (file)
@@ -1094,8 +1094,10 @@ const (
        SIOCSLIFPHYADDR                   = 0x8118694a
        SIOCSLOWAT                        = 0x80047302
        SIOCSPGRP                         = 0x80047308
+       SOCK_CLOEXEC                      = 0x10000000
        SOCK_DGRAM                        = 0x2
        SOCK_MAXADDRLEN                   = 0xff
+       SOCK_NONBLOCK                     = 0x20000000
        SOCK_RAW                          = 0x3
        SOCK_RDM                          = 0x4
        SOCK_SEQPACKET                    = 0x5
index 08e90e530547678f385e6ab511e1e6af1bc15fe5..7a215104077b72ff3aa63d094c6553bad6fa1b59 100644 (file)
@@ -1287,3 +1287,14 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
        }
        return
 }
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {
+       r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
+       nfd = int(r0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
index 277478d208bafc3ed21063b05bc67d960a77dbc4..3c2e342970470e6386d4d27a29b2477e855776bb 100644 (file)
@@ -301,4 +301,5 @@ const (
        SYS_LPATHCONF              = 533 // { int lpathconf(char *path, int name); }
        SYS_VMM_GUEST_CTL          = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); }
        SYS_VMM_GUEST_SYNC_ADDR    = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); }
+       SYS_ACCEPT4                = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); }
 )