1// Copyright 2009 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// We require Linux kernel version 2.6.32. The accept4 system call was 6// added in version 2.6.28, so in general we can use accept4. 7// Unfortunately, for ARM only, accept4 was added in version 2.6.36. 8// Handle that case here, by using a copy of the Accept function that 9// we used in Go 1.17. 10 11//go:build linux && arm 12 13package syscall 14 15//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) 16 17func Accept(fd int) (nfd int, sa Sockaddr, err error) { 18 var rsa RawSockaddrAny 19 var len _Socklen = SizeofSockaddrAny 20 // Try accept4 first for Android and newer kernels. 21 nfd, err = accept4(fd, &rsa, &len, 0) 22 if err == ENOSYS { 23 nfd, err = accept(fd, &rsa, &len) 24 } 25 if err != nil { 26 return 27 } 28 sa, err = anyToSockaddr(&rsa) 29 if err != nil { 30 Close(nfd) 31 nfd = 0 32 } 33 return 34} 35