Skip to content

Commit 6fa85e8

Browse files
tklauserjosharian
authored andcommitted
[tailscale1.16] 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 golang#45767 (cherry picked from golang.org/cl/313769) Change-Id: If190ace0e0213207fdaf6eeb79a5543ef18456de Reviewed-on: https://go-review.googlesource.com/c/go/+/313769 Trust: Tobias Klauser <[email protected]> Run-TryBot: Tobias Klauser <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]> TryBot-Result: Go Bot <[email protected]>
1 parent 3297502 commit 6fa85e8

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

src/syscall/syscall_linux.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,11 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
550550
func Accept(fd int) (nfd int, sa Sockaddr, err error) {
551551
var rsa RawSockaddrAny
552552
var len _Socklen = SizeofSockaddrAny
553-
nfd, err = accept(fd, &rsa, &len)
553+
// Try accept4 first for Android, then try accept for kernel older than 2.6.28
554+
nfd, err = accept4(fd, &rsa, &len, 0)
555+
if err == ENOSYS {
556+
nfd, err = accept(fd, &rsa, &len)
557+
}
554558
if err != nil {
555559
return
556560
}

0 commit comments

Comments
 (0)