krb5 commit: Only set SO_REUSEPORT on macOS
ghudson at mit.edu
ghudson at mit.edu
Fri Apr 25 00:14:46 EDT 2025
https://github.com/krb5/krb5/commit/e21e17e200cc9ad874628d4d2a9d6b0d7dbdf5ea
commit e21e17e200cc9ad874628d4d2a9d6b0d7dbdf5ea
Author: Greg Hudson <ghudson at mit.edu>
Date: Wed Apr 23 17:19:46 2025 -0400
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.
src/kdc/t_sockact.c | 2 +-
src/lib/apputils/net-server.c | 4 +++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/kdc/t_sockact.c b/src/kdc/t_sockact.c
index cb4a4bc7a..53a3b4d30 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 c8c83606d..9b04cfd01 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;
More information about the cvs-krb5
mailing list