1
0
forked from pool/glusterfs
glusterfs/0001-socket-only-issue-IPPROTO_IPV6-setsockopt-calls-on-A.patch

40 lines
1.5 KiB
Diff

From b46885bba7ce6a41aba7f4b2d4482cf4d6efe792 Mon Sep 17 00:00:00 2001
From: Jan Engelhardt <jengelh@inai.de>
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