// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // We require Linux kernel version 2.6.32. The accept4 system call was // added in version 2.6.28, so in general we can use accept4. // Unfortunately, for ARM only, accept4 was added in version 2.6.36. // Handle that case here, by using a copy of the Accept function that // we used in Go 1.17. //go:build linux && arm package syscall //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) func Accept(fd int) (nfd int, sa Sockaddr, err error) { var rsa RawSockaddrAny var len _Socklen = SizeofSockaddrAny // Try accept4 first for Android and newer kernels. nfd, err = accept4(fd, &rsa, &len, 0) if err == ENOSYS { nfd, err = accept(fd, &rsa, &len) } if err != nil { return } sa, err = anyToSockaddr(&rsa) if err != nil { Close(nfd) nfd = 0 } return }