diff options
author | Roger Meier <roger@apache.org> | 2013-09-02 20:43:57 +0200 |
---|---|---|
committer | Roger Meier <roger@apache.org> | 2013-09-02 20:43:57 +0200 |
commit | 657b933f28ffdaedb49c5a93dc3e0c2ceeae1807 (patch) | |
tree | 2815541453fe46e318c5d2f6f992b78d082cee97 /lib/cpp/src/thrift/transport/TServerSocket.cpp | |
parent | acf15dc30429d609735efc7686f197607d8923d1 (diff) | |
download | thrift-657b933f28ffdaedb49c5a93dc3e0c2ceeae1807.tar.gz |
THRIFT-1481 cpp: Unix domain sockets in C++ do not support the abstract namespace
Patch: Ben Craig
Diffstat (limited to 'lib/cpp/src/thrift/transport/TServerSocket.cpp')
-rwxr-xr-x[-rw-r--r--] | lib/cpp/src/thrift/transport/TServerSocket.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/cpp/src/thrift/transport/TServerSocket.cpp b/lib/cpp/src/thrift/transport/TServerSocket.cpp index 4cecc3bb3..59a088593 100644..100755 --- a/lib/cpp/src/thrift/transport/TServerSocket.cpp +++ b/lib/cpp/src/thrift/transport/TServerSocket.cpp @@ -304,21 +304,21 @@ void TServerSocket::listen() { #ifndef _WIN32 // Unix Domain Socket - struct sockaddr_un address; - socklen_t len; + struct sockaddr_un address = {0}; + size_t len = path_.size()+1; - if (path_.length() > sizeof(address.sun_path)) { + if (len > sizeof(address.sun_path)) { int errno_copy = THRIFT_GET_SOCKET_ERROR; GlobalOutput.perror("TSocket::listen() Unix Domain socket path too long", errno_copy); throw TTransportException(TTransportException::NOT_OPEN, " Unix Domain socket path too long"); } address.sun_family = AF_UNIX; - THRIFT_SNPRINTF(address.sun_path, sizeof(address.sun_path), "%s", path_.c_str()); - len = sizeof(address); + memcpy(address.sun_path, path_.c_str(), len); + socklen_t structlen = static_cast<socklen_t>(sizeof(address)); do { - if (0 == ::bind(serverSocket_, (struct sockaddr *) &address, len)) { + if (0 == ::bind(serverSocket_, (struct sockaddr *) &address, structlen)) { break; } // use short circuit evaluation here to only sleep if we need to |