From d19ff857e887eacb631721f188c7d365c2331456 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Tue, 27 Apr 2021 00:23:43 +0200 Subject: [PATCH] unix: 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. Updates golang/go#45767 Change-Id: If557eaaaa0b69112bbe66ed820fbb382afb53b04 Reviewed-on: https://go-review.googlesource.com/c/sys/+/313690 Trust: Tobias Klauser Run-TryBot: Tobias Klauser TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor --- unix/syscall_linux.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/unix/syscall_linux.go b/unix/syscall_linux.go index 4263953b..2dd7c8e3 100644 --- a/unix/syscall_linux.go +++ b/unix/syscall_linux.go @@ -1151,7 +1151,11 @@ func anyToSockaddr(fd int, 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 }