aboutsummaryrefslogtreecommitdiff
path: root/src/syscall
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2021-04-27 00:11:00 +0200
committerTobias Klauser <tobias.klauser@gmail.com>2021-04-26 23:06:45 +0000
commit903b25178e51fa96d37a91b020747ce236ba04f0 (patch)
tree1d614b29c907fe7404ac5ffa7ca9a59178cce7e4 /src/syscall
parentbe28caf0aa1649c4422f64e687a388a027686e6e (diff)
downloadgo-903b25178e51fa96d37a91b020747ce236ba04f0.tar.gz
go-903b25178e51fa96d37a91b020747ce236ba04f0.zip
syscall: on linux use accept4 in Accept, fall back to accept
Android seems to block the accept syscall in newer versions. Use accept4 instead on kernel versions that support it (Linux 2.6.28 and newer) and fall back to accept on ENOSYS. Fixes #45767 Change-Id: If190ace0e0213207fdaf6eeb79a5543ef18456de Reviewed-on: https://go-review.googlesource.com/c/go/+/313769 Trust: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/syscall')
-rw-r--r--src/syscall/syscall_linux.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/syscall/syscall_linux.go b/src/syscall/syscall_linux.go
index 24e051dcbd..dfce3d0a4b 100644
--- a/src/syscall/syscall_linux.go
+++ b/src/syscall/syscall_linux.go
@@ -553,7 +553,11 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
func Accept(fd int) (nfd int, sa Sockaddr, err error) {
var rsa RawSockaddrAny
var len _Socklen = SizeofSockaddrAny
- nfd, err = accept(fd, &rsa, &len)
+ // Try accept4 first for Android, then try accept for kernel older than 2.6.28
+ nfd, err = accept4(fd, &rsa, &len, 0)
+ if err == ENOSYS {
+ nfd, err = accept(fd, &rsa, &len)
+ }
if err != nil {
return
}