]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: sock: update broken accept4 detection for older hardwares.
authorDavid Carlier <devnexen@gmail.com>
Thu, 7 Aug 2025 18:43:39 +0000 (19:43 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 8 Aug 2025 04:01:18 +0000 (06:01 +0200)
Some older ARM embedded settings set errno to EPERM instead of ENOSYS
for missing implementations (e.g. Freescale ARM 2.6.35)

src/sock.c

index 83db745955171bfb8c98c968eb0679bb21388e1e..3644a1a9156d5b15deec0ee3727d627a20dad1c7 100644 (file)
@@ -88,9 +88,13 @@ struct connection *sock_accept_conn(struct listener *l, int *status)
         * the legacy accept() + fcntl().
         */
        if (unlikely(accept4_broken) ||
+           /* Albeit it appears it does not make sense to carry on with accept
+            * if we encounter EPERM, some old embedded ARM Linux 2.6.x sets as
+            * such instead of ENOSYS.
+            */
            (((cfd = accept4(l->rx.fd, (struct sockaddr*)addr, &laddr,
                             SOCK_NONBLOCK | (master ? SOCK_CLOEXEC : 0))) == -1) &&
-            (errno == ENOSYS || errno == EINVAL || errno == EBADF) &&
+            (errno == ENOSYS || errno == EINVAL || errno == EBADF || errno == EPERM) &&
             ((accept4_broken = 1))))
 #endif
        {