| // Copyright 2009 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. |
| |
| // We require Linux kernel version 2.6.32. The accept4 system call was |
| // added in version 2.6.28, so in general we can use accept4. |
| // Unfortunately, for ARM only, accept4 was added in version 2.6.36. |
| // Handle that case here, by using a copy of the Accept function that |
| // we used in Go 1.17. |
| |
| //go:build linux && arm |
| |
| package syscall |
| |
| //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) |
| |
| func Accept(fd int) (nfd int, sa Sockaddr, err error) { |
| var rsa RawSockaddrAny |
| var len _Socklen = SizeofSockaddrAny |
| // Try accept4 first for Android and newer kernels. |
| nfd, err = accept4(fd, &rsa, &len, 0) |
| if err == ENOSYS { |
| nfd, err = accept(fd, &rsa, &len) |
| } |
| if err != nil { |
| return |
| } |
| sa, err = anyToSockaddr(&rsa) |
| if err != nil { |
| Close(nfd) |
| nfd = 0 |
| } |
| return |
| } |