From: Roger Meier Date: Sat, 4 Jun 2011 08:57:43 +0000 (+0000) Subject: THRIFT-1196 Unix Domain Socket Support is broken X-Git-Tag: 0.7.0~79 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=18f1050e71894472ff4ce70fa3b393fa2c77e3cd;p=common%2Fthrift.git THRIFT-1196 Unix Domain Socket Support is broken git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1131352 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/lib/cpp/src/transport/TServerSocket.cpp b/lib/cpp/src/transport/TServerSocket.cpp index 276b060b..25d33e08 100644 --- a/lib/cpp/src/transport/TServerSocket.cpp +++ b/lib/cpp/src/transport/TServerSocket.cpp @@ -202,7 +202,7 @@ void TServerSocket::listen() { #endif // #ifdef TCP_DEFER_ACCEPT #ifdef IPV6_V6ONLY - if (res->ai_family == AF_INET6) { + if (res->ai_family == AF_INET6 && path_.empty()) { int zero = 0; if (-1 == setsockopt(serverSocket_, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero))) { diff --git a/lib/cpp/src/transport/TSocket.cpp b/lib/cpp/src/transport/TSocket.cpp index 73cb56dd..7b1d3561 100644 --- a/lib/cpp/src/transport/TSocket.cpp +++ b/lib/cpp/src/transport/TSocket.cpp @@ -277,7 +277,9 @@ void TSocket::openConnection(struct addrinfo *res) { // Set socket back to normal mode (blocking) fcntl(socket_, F_SETFL, flags); - setCachedAddress(res->ai_addr, res->ai_addrlen); + if (path_.empty()) { + setCachedAddress(res->ai_addr, res->ai_addrlen); + } } void TSocket::open() { @@ -561,7 +563,7 @@ void TSocket::setLinger(bool on, int linger) { void TSocket::setNoDelay(bool noDelay) { noDelay_ = noDelay; - if (socket_ < 0) { + if (socket_ < 0 || !path_.empty()) { return; } @@ -641,7 +643,7 @@ string TSocket::getSocketInfo() { } std::string TSocket::getPeerHost() { - if (peerHost_.empty()) { + if (peerHost_.empty() && path_.empty()) { struct sockaddr_storage addr; struct sockaddr* addrPtr; socklen_t addrLen; @@ -675,7 +677,7 @@ std::string TSocket::getPeerHost() { } std::string TSocket::getPeerAddress() { - if (peerAddress_.empty()) { + if (peerAddress_.empty() && path_.empty()) { struct sockaddr_storage addr; struct sockaddr* addrPtr; socklen_t addrLen; @@ -716,6 +718,10 @@ int TSocket::getPeerPort() { } void TSocket::setCachedAddress(const sockaddr* addr, socklen_t len) { + if (!path_.empty()) { + return; + } + switch (addr->sa_family) { case AF_INET: if (len == sizeof(sockaddr_in)) {