mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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>
This commit is contained in:
parent
be28caf0aa
commit
903b25178e
1 changed files with 5 additions and 1 deletions
|
|
@ -553,7 +553,11 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
|
||||||
func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
||||||
var rsa RawSockaddrAny
|
var rsa RawSockaddrAny
|
||||||
var len _Socklen = SizeofSockaddrAny
|
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 {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue