From 13aea4600c7e170a0f178d72d7d68d3bddd7ef9a Mon Sep 17 00:00:00 2001 From: David Reiss Date: Tue, 10 Jun 2008 22:56:04 +0000 Subject: [PATCH] Fix IPv6 on FreeBSD. On FreeBSD (and possibly other BSDs), binding to ipv6 is restricted unless the sysctl net.inet6.ip6.v6only=0 or the socket option IPV6_V6ONLY is turned off. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@666367 13f79535-47bb-0310-9956-ffa450edef68 --- lib/cpp/src/server/TNonblockingServer.cpp | 8 ++++++++ lib/cpp/src/transport/TServerSocket.cpp | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/cpp/src/server/TNonblockingServer.cpp b/lib/cpp/src/server/TNonblockingServer.cpp index ebe85a6a..e376f971 100644 --- a/lib/cpp/src/server/TNonblockingServer.cpp +++ b/lib/cpp/src/server/TNonblockingServer.cpp @@ -590,6 +590,14 @@ void TNonblockingServer::listenSocket() { throw TException("TNonblockingServer::serve() socket() -1"); } + #ifdef IPV6_V6ONLY + int zero = 0; + if (-1 == setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero))) { + GlobalOutput("TServerSocket::listen() IPV6_V6ONLY"); + } + #endif // #ifdef IPV6_V6ONLY + + int one = 1; // Set reuseaddr to avoid 2MSL delay on server restart diff --git a/lib/cpp/src/transport/TServerSocket.cpp b/lib/cpp/src/transport/TServerSocket.cpp index cc81390f..094495d3 100644 --- a/lib/cpp/src/transport/TServerSocket.cpp +++ b/lib/cpp/src/transport/TServerSocket.cpp @@ -168,6 +168,14 @@ 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("TServerSocket::listen() IPV6_V6ONLY"); + } + #endif // #ifdef IPV6_V6ONLY + // Turn linger off, don't want to block on calls to close struct linger ling = {0, 0}; if (-1 == setsockopt(serverSocket_, SOL_SOCKET, SO_LINGER, -- 2.17.1