From: Greg Hudson Date: Wed, 23 Apr 2025 21:19:46 +0000 (-0400) Subject: Only set SO_REUSEPORT on macOS X-Git-Tag: krb5-1.22-beta1~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e21e17e200cc9ad874628d4d2a9d6b0d7dbdf5ea;p=thirdparty%2Fkrb5.git Only set SO_REUSEPORT on macOS 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. --- diff --git a/src/kdc/t_sockact.c b/src/kdc/t_sockact.c index cb4a4bc7a9..53a3b4d305 100644 --- a/src/kdc/t_sockact.c +++ b/src/kdc/t_sockact.c @@ -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 diff --git a/src/lib/apputils/net-server.c b/src/lib/apputils/net-server.c index c8c83606d6..9b04cfd012 100644 --- a/src/lib/apputils/net-server.c +++ b/src/lib/apputils/net-server.c @@ -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;