You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by be...@apache.org on 2013/09/16 22:43:02 UTC
git commit: THRIFT-1944: Binding to zero port Client: cpp Patch:
Akshat Aranya
Updated Branches:
refs/heads/master 8cd3efe50 -> fd7ddef72
THRIFT-1944: Binding to zero port
Client: cpp
Patch: Akshat Aranya
Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/fd7ddef7
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/fd7ddef7
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/fd7ddef7
Branch: refs/heads/master
Commit: fd7ddef7295d9d3459ff0f46829a479ea3a7f724
Parents: 8cd3efe
Author: Ben Craig <be...@apache.org>
Authored: Mon Sep 16 15:41:39 2013 -0500
Committer: Ben Craig <be...@apache.org>
Committed: Mon Sep 16 15:41:39 2013 -0500
----------------------------------------------------------------------
lib/cpp/src/thrift/transport/TServerSocket.cpp | 27 +++++++++++++++++++++
lib/cpp/src/thrift/transport/TServerSocket.h | 1 +
2 files changed, 28 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/thrift/blob/fd7ddef7/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 59a0885..1df719d 100755
--- a/lib/cpp/src/thrift/transport/TServerSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TServerSocket.cpp
@@ -337,6 +337,29 @@ void TServerSocket::listen() {
// free addrinfo
freeaddrinfo(res0);
+
+ // retrieve bind info
+ if (port_ == 0 && retries <= retryLimit_) {
+ struct sockaddr sa;
+ socklen_t len = sizeof(sa);
+ std::memset(&sa, 0, len);
+ if (::getsockname(serverSocket_, &sa, &len) < 0) {
+ int errno_copy = errno;
+ GlobalOutput.perror("TServerSocket::getPort() getsockname() ", errno_copy);
+ }
+ else {
+ if (sa.sa_family == AF_INET6) {
+ const struct sockaddr_in6*
+ sin = reinterpret_cast<const struct sockaddr_in6 *>(&sa);
+ port_ = ntohs(sin->sin6_port);
+ }
+ else {
+ const struct sockaddr_in*
+ sin = reinterpret_cast<const struct sockaddr_in *>(&sa);
+ port_ = ntohs(sin->sin_port);
+ }
+ }
+ }
}
// throw an error if we failed to bind properly
@@ -365,6 +388,10 @@ void TServerSocket::listen() {
// The socket is now listening!
}
+int TServerSocket::getPort() {
+ return port_;
+}
+
shared_ptr<TTransport> TServerSocket::acceptImpl() {
if (serverSocket_ == THRIFT_INVALID_SOCKET) {
throw TTransportException(TTransportException::NOT_OPEN, "TServerSocket not listening");
http://git-wip-us.apache.org/repos/asf/thrift/blob/fd7ddef7/lib/cpp/src/thrift/transport/TServerSocket.h
----------------------------------------------------------------------
diff --git a/lib/cpp/src/thrift/transport/TServerSocket.h b/lib/cpp/src/thrift/transport/TServerSocket.h
index 4a8c029..e7b7a82 100644
--- a/lib/cpp/src/thrift/transport/TServerSocket.h
+++ b/lib/cpp/src/thrift/transport/TServerSocket.h
@@ -59,6 +59,7 @@ class TServerSocket : public TServerTransport {
void close();
void interrupt();
+ int getPort();
protected:
boost::shared_ptr<TTransport> acceptImpl();