Author: dreiss
Date: Tue Jun 10 15:56:04 2008
New Revision: 666367
URL: http://svn.apache.org/viewvc?rev=666367&view=rev
Log:
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.
Modified:
incubator/thrift/trunk/lib/cpp/src/server/TNonblockingServer.cpp
incubator/thrift/trunk/lib/cpp/src/transport/TServerSocket.cpp
Modified: incubator/thrift/trunk/lib/cpp/src/server/TNonblockingServer.cpp
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cpp/src/server/TNonblockingServer.cpp?rev=666367&r1=666366&r2=666367&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/cpp/src/server/TNonblockingServer.cpp (original)
+++ incubator/thrift/trunk/lib/cpp/src/server/TNonblockingServer.cpp Tue Jun 10
15:56:04 2008
@@ -590,6 +590,14 @@
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
Modified: incubator/thrift/trunk/lib/cpp/src/transport/TServerSocket.cpp
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cpp/src/transport/TServerSocket.cpp?rev=666367&r1=666366&r2=666367&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/cpp/src/transport/TServerSocket.cpp (original)
+++ incubator/thrift/trunk/lib/cpp/src/transport/TServerSocket.cpp Tue Jun 10
15:56:04 2008
@@ -168,6 +168,14 @@
}
#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,