forked from pool/glusterfs
40 lines
1.5 KiB
Diff
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
|
||
|
|