From eee98bede4e9934a0cdd32fcffcd0cc659b4d09a Mon Sep 17 00:00:00 2001 From: David Reiss Date: Tue, 9 Mar 2010 05:20:10 +0000 Subject: [PATCH] cpp: Disable IPV6_V6ONLY only if the socket is an AF_INET6 socket Some systems may disable IPV6 completely. Ensure that we only disable IPV6_V6ONLY if the socket is AF_INET6 No longer see the warning: Thrift: Wed Jul 22 18:08:36 2009 TServerSocket::listen() IPV6_V6ONLY Protocol not available git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@920683 13f79535-47bb-0310-9956-ffa450edef68 --- lib/cpp/src/server/TNonblockingServer.cpp | 8 +++++--- lib/cpp/src/transport/TServerSocket.cpp | 10 ++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/cpp/src/server/TNonblockingServer.cpp b/lib/cpp/src/server/TNonblockingServer.cpp index 649994d9..8c039b97 100644 --- a/lib/cpp/src/server/TNonblockingServer.cpp +++ b/lib/cpp/src/server/TNonblockingServer.cpp @@ -651,9 +651,11 @@ void TNonblockingServer::listenSocket() { } #ifdef IPV6_V6ONLY - int zero = 0; - if (-1 == setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero))) { - GlobalOutput("TServerSocket::listen() IPV6_V6ONLY"); + if (res->ai_family == AF_INET6) { + int zero = 0; + if (-1 == setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero))) { + GlobalOutput("TServerSocket::listen() IPV6_V6ONLY"); + } } #endif // #ifdef IPV6_V6ONLY diff --git a/lib/cpp/src/transport/TServerSocket.cpp b/lib/cpp/src/transport/TServerSocket.cpp index 6b5bf05a..2f14fd58 100644 --- a/lib/cpp/src/transport/TServerSocket.cpp +++ b/lib/cpp/src/transport/TServerSocket.cpp @@ -182,10 +182,12 @@ void TServerSocket::listen() { #endif // #ifdef TCP_DEFER_ACCEPT #ifdef IPV6_V6ONLY - int zero = 0; - if (-1 == setsockopt(serverSocket_, IPPROTO_IPV6, IPV6_V6ONLY, - &zero, sizeof(zero))) { - GlobalOutput.perror("TServerSocket::listen() IPV6_V6ONLY ", errno); + if (res->ai_family == AF_INET6) { + int zero = 0; + if (-1 == setsockopt(serverSocket_, IPPROTO_IPV6, IPV6_V6ONLY, + &zero, sizeof(zero))) { + GlobalOutput.perror("TServerSocket::listen() IPV6_V6ONLY ", errno); + } } #endif // #ifdef IPV6_V6ONLY -- 2.17.1