mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 14:51:11 +01:00
Fix bug 5762: detect missing accept4 that gives ENOSYS
We had been checking for EINVAL, but that means that SOCK_* isn't supported, not that the syscall itself is missing. Bugfix on 0.2.3.1-alpha, which started to use accept4.
This commit is contained in:
parent
c9afd6f9c5
commit
a1538d607d
2 changed files with 8 additions and 3 deletions
4
changes/bug5762
Normal file
4
changes/bug5762
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
o Minor bugfixes:
|
||||||
|
- Work correctly on Linux systems with accept4 support advertised in
|
||||||
|
their headers, but without accept4 support in the kernel. Fix
|
||||||
|
by murb. Fixes bug 5762; bugfix on 0.2.3.1-alpha.
|
|
@ -1013,10 +1013,11 @@ tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr, socklen_t *len)
|
||||||
s = accept4(sockfd, addr, len, SOCK_CLOEXEC);
|
s = accept4(sockfd, addr, len, SOCK_CLOEXEC);
|
||||||
if (SOCKET_OK(s))
|
if (SOCKET_OK(s))
|
||||||
goto socket_ok;
|
goto socket_ok;
|
||||||
/* If we got an error, see if it is EINVAL. EINVAL might indicate that,
|
/* If we got an error, see if it is ENOSYS. ENOSYS indicates that,
|
||||||
* event though we were built on a system with accept4 support, we
|
* event though we were built on a system with accept4 support, we
|
||||||
* are running on one without. */
|
* are running on one without. Also, check for EINVAL, which indicates that
|
||||||
if (errno != EINVAL)
|
* we are missing SOCK_CLOEXEC support. */
|
||||||
|
if (errno != EINVAL && errno != ENOSYS)
|
||||||
return s;
|
return s;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue