THRIFT-3502: C++ TServerSocket passes small buffer to getsockname Client: C++ Patch: Jeremy Spiegel
This closes #761 Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/269473d4 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/269473d4 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/269473d4 Branch: refs/heads/master Commit: 269473d4750a1e03ff0c85125bfa20b2f2475aa3 Parents: 2aaae8a Author: Jeremy Spiegel <[email protected]> Authored: Tue Dec 22 16:19:20 2015 -0800 Committer: Nobuaki Sukegawa <[email protected]> Committed: Sun Jan 3 02:55:16 2016 +0900 ---------------------------------------------------------------------- lib/cpp/src/thrift/transport/TServerSocket.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/269473d4/lib/cpp/src/thrift/transport/TServerSocket.cpp ---------------------------------------------------------------------- diff --git a/lib/cpp/src/thrift/transport/TServerSocket.cpp b/lib/cpp/src/thrift/transport/TServerSocket.cpp index 137dc32..347da4d 100644 --- a/lib/cpp/src/thrift/transport/TServerSocket.cpp +++ b/lib/cpp/src/thrift/transport/TServerSocket.cpp @@ -494,14 +494,14 @@ void TServerSocket::listen() { // retrieve bind info if (port_ == 0 && retries <= retryLimit_) { - struct sockaddr sa; + struct sockaddr_storage sa; socklen_t len = sizeof(sa); std::memset(&sa, 0, len); - if (::getsockname(serverSocket_, &sa, &len) < 0) { + if (::getsockname(serverSocket_, reinterpret_cast<struct sockaddr*>(&sa), &len) < 0) { int errno_copy = errno; GlobalOutput.perror("TServerSocket::getPort() getsockname() ", errno_copy); } else { - if (sa.sa_family == AF_INET6) { + if (sa.ss_family == AF_INET6) { const struct sockaddr_in6* sin = reinterpret_cast<const struct sockaddr_in6*>(&sa); port_ = ntohs(sin->sin6_port); } else {
