]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Only set SO_REUSEPORT on macOS 1429/head
authorGreg Hudson <ghudson@mit.edu>
Wed, 23 Apr 2025 21:19:46 +0000 (17:19 -0400)
committerGreg Hudson <ghudson@mit.edu>
Fri, 25 Apr 2025 03:57:07 +0000 (23:57 -0400)
Recent versions of the Linux kernel (after commit
5b0af621c3f6ef9261cf6067812f2fd9943acb4b) return -1 with errno set to
EOPNOTSUPP when a process attempts to set SO_REUSEPORT on a UNIX
domain socket.  We started setting this flag in commit
c423f13cc2f3fbdbf48390535cb1629b99b0eb27 to work around a test suite
issue on macOS.  Restrict setting SO_REUSEPORT to macOS to avoid
unnecessary interactions with its behavior on other platforms.

src/kdc/t_sockact.c
src/lib/apputils/net-server.c

index cb4a4bc7a943060e74d46bc21e81eb82d2864a17..53a3b4d30513c9b4fdd2871edd934908e3bf1585 100644 (file)
@@ -56,7 +56,7 @@ create_socket(const struct sockaddr *addr)
         abort();
     if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) != 0)
         abort();
-#ifdef SO_REUSEPORT
+#if defined(SO_REUSEPORT) && defined(__APPLE__)
     if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &one, sizeof(one)) != 0)
         abort();
 #endif
index c8c83606d6519894e99ed2b6bfc14643e0d1a114..9b04cfd0125fb29f5c795abf0f910abc57df63ef 100644 (file)
@@ -92,7 +92,9 @@ setreuseaddr(int sock, int value)
     st = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
     if (st)
         return st;
-#ifdef SO_REUSEPORT
+#if defined(SO_REUSEPORT) && defined(__APPLE__)
+    /* macOS experimentally needs this flag as well to avoid conflicts between
+     * recently exited server processes and new ones. */
     st = setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value));
     if (st)
         return st;