mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-01-26 21:20:24 +01:00
Check EINVAL for accept4()
It was reported that accept4() will return -1 with errrno is EINVAL on arm platform, so check EINVAL for accept4() and retry accept(). Bug: https://bugs.freedesktop.org/show_bug.cgi?id=69026 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
This commit is contained in:
parent
c1288c5366
commit
200a11ebbe
1 changed files with 6 additions and 2 deletions
|
|
@ -1948,11 +1948,15 @@ _dbus_accept (int listen_fd)
|
|||
retry:
|
||||
|
||||
#ifdef HAVE_ACCEPT4
|
||||
/* We assume that if accept4 is available SOCK_CLOEXEC is too */
|
||||
/*
|
||||
* At compile-time, we assume that if accept4() is available in
|
||||
* libc headers, SOCK_CLOEXEC is too. At runtime, it is still
|
||||
* not necessarily true that either is supported by the running kernel.
|
||||
*/
|
||||
client_fd = accept4 (listen_fd, &addr, &addrlen, SOCK_CLOEXEC);
|
||||
cloexec_done = client_fd >= 0;
|
||||
|
||||
if (client_fd < 0 && errno == ENOSYS)
|
||||
if (client_fd < 0 && (errno == ENOSYS || errno == EINVAL))
|
||||
#endif
|
||||
{
|
||||
client_fd = accept (listen_fd, &addr, &addrlen);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue