From b46885bba7ce6a41aba7f4b2d4482cf4d6efe792 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Thu, 4 May 2023 15:35:03 +0200 Subject: [PATCH] socket: only issue IPPROTO_IPV6 setsockopt calls on AF_INET6 sockets Related-to: #2648 --- rpc/rpc-transport/socket/src/socket.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index 97c9544d34..5b6870e6c4 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -3281,15 +3281,17 @@ socket_connect(rpc_transport_t *this, int port) * net.ipv6.bindv6only to 1 so that gluster services are * available over IPv4 & IPv6. */ -#ifdef IPV6_DEFAULT int disable_v6only = 0; - if (setsockopt(priv->sock, IPPROTO_IPV6, IPV6_V6ONLY, + int fdsock_family = 0; + socklen_t fdsock_size = sizeof(fdsock_family); + if (getsockopt(priv->sock, SOL_SOCKET, SO_DOMAIN, &fdsock_family, &fdsock_size) == 0 && + fdsock_family == AF_INET6 && + setsockopt(priv->sock, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&disable_v6only, sizeof(disable_v6only)) < 0) { gf_log(this->name, GF_LOG_WARNING, "Error disabling sockopt IPV6_V6ONLY: \"%s\"", strerror(errno)); } -#endif if (sa_family != AF_UNIX) { if (priv->nodelay) { -- 2.40.1