Skip to content

Commit 1fdc096

Browse files
tklauserDentonGentry
authored andcommitted
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 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 1fdc096

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)