This is an automated email from the ASF dual-hosted git repository.
dcelasun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/thrift.git
The following commit(s) were added to refs/heads/master by this push:
new ed0bad3 Add isOpen() to TServerTransport
ed0bad3 is described below
commit ed0bad34301741c6ea7473e891d1c6886e8db9e1
Author: Mario Emmenlauer <[email protected]>
AuthorDate: Fri Apr 24 08:50:43 2020 +0200
Add isOpen() to TServerTransport
Client: cpp
---
lib/cpp/src/thrift/transport/TPipeServer.cpp | 4 ++++
lib/cpp/src/thrift/transport/TPipeServer.h | 2 ++
lib/cpp/src/thrift/transport/TServerSocket.cpp | 4 ++++
lib/cpp/src/thrift/transport/TServerSocket.h | 3 +++
lib/cpp/src/thrift/transport/TServerTransport.h | 5 +++++
lib/cpp/test/TServerSocketTest.cpp | 6 +++++-
lib/cpp/test/TSocketInterruptTest.cpp | 1 +
7 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/lib/cpp/src/thrift/transport/TPipeServer.cpp
b/lib/cpp/src/thrift/transport/TPipeServer.cpp
index f0d1e70..0855e2c 100644
--- a/lib/cpp/src/thrift/transport/TPipeServer.cpp
+++ b/lib/cpp/src/thrift/transport/TPipeServer.cpp
@@ -181,6 +181,10 @@ TPipeServer::TPipeServer() : bufsize_(1024),
isAnonymous_(true) {
//---- Destructor ----
TPipeServer::~TPipeServer() {}
+bool TPipeServer::isOpen() const {
+ return (impl_->getPipeHandle() != INVALID_HANDLE_VALUE);
+}
+
//---------------------------------------------------------
// Transport callbacks
//---------------------------------------------------------
diff --git a/lib/cpp/src/thrift/transport/TPipeServer.h
b/lib/cpp/src/thrift/transport/TPipeServer.h
index 871b6af..d4255cb 100644
--- a/lib/cpp/src/thrift/transport/TPipeServer.h
+++ b/lib/cpp/src/thrift/transport/TPipeServer.h
@@ -59,6 +59,8 @@ public:
// Destructor
virtual ~TPipeServer();
+ bool isOpen() const override;
+
// Standard transport callbacks
void interrupt() override;
void close() override;
diff --git a/lib/cpp/src/thrift/transport/TServerSocket.cpp
b/lib/cpp/src/thrift/transport/TServerSocket.cpp
index ece0544..1bc6b47 100644
--- a/lib/cpp/src/thrift/transport/TServerSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TServerSocket.cpp
@@ -185,6 +185,10 @@ TServerSocket::~TServerSocket() {
close();
}
+bool TServerSocket::isOpen() const {
+ return (serverSocket_ != THRIFT_INVALID_SOCKET);
+}
+
void TServerSocket::setSendTimeout(int sendTimeout) {
sendTimeout_ = sendTimeout;
}
diff --git a/lib/cpp/src/thrift/transport/TServerSocket.h
b/lib/cpp/src/thrift/transport/TServerSocket.h
index d640968..4562341 100644
--- a/lib/cpp/src/thrift/transport/TServerSocket.h
+++ b/lib/cpp/src/thrift/transport/TServerSocket.h
@@ -98,6 +98,9 @@ public:
~TServerSocket() override;
+
+ bool isOpen() const override;
+
void setSendTimeout(int sendTimeout);
void setRecvTimeout(int recvTimeout);
diff --git a/lib/cpp/src/thrift/transport/TServerTransport.h
b/lib/cpp/src/thrift/transport/TServerTransport.h
index f465bb3..9e84850 100644
--- a/lib/cpp/src/thrift/transport/TServerTransport.h
+++ b/lib/cpp/src/thrift/transport/TServerTransport.h
@@ -38,6 +38,11 @@ public:
virtual ~TServerTransport() = default;
/**
+ * Whether this transport is open.
+ */
+ virtual bool isOpen() const { return false; }
+
+ /**
* Starts the server transport listening for new connections. Prior to this
* call most transports will not return anything when accept is called.
*
diff --git a/lib/cpp/test/TServerSocketTest.cpp
b/lib/cpp/test/TServerSocketTest.cpp
index bec6d47..c96700f 100644
--- a/lib/cpp/test/TServerSocketTest.cpp
+++ b/lib/cpp/test/TServerSocketTest.cpp
@@ -35,6 +35,7 @@ BOOST_AUTO_TEST_SUITE(TServerSocketTest)
BOOST_AUTO_TEST_CASE(test_bind_to_address) {
TServerSocket sock1("localhost", 0);
sock1.listen();
+ BOOST_CHECK(sock1.isOpen());
int port = sock1.getPort();
TSocket clientSock("localhost", port);
clientSock.open();
@@ -48,17 +49,20 @@ BOOST_AUTO_TEST_CASE(test_bind_to_address) {
sock2.close();
}
-BOOST_AUTO_TEST_CASE(test_listen_valid_port) {
+BOOST_AUTO_TEST_CASE(test_listen_invalid_port) {
TServerSocket sock1(-1);
TTRANSPORT_CHECK_THROW(sock1.listen(), TTransportException::BAD_ARGS);
+ BOOST_CHECK(!sock1.isOpen());
TServerSocket sock2(65536);
TTRANSPORT_CHECK_THROW(sock2.listen(), TTransportException::BAD_ARGS);
+ BOOST_CHECK(!sock1.isOpen());
}
BOOST_AUTO_TEST_CASE(test_close_before_listen) {
TServerSocket sock1("localhost", 0);
sock1.close();
+ BOOST_CHECK(!sock1.isOpen());
}
BOOST_AUTO_TEST_CASE(test_get_port) {
diff --git a/lib/cpp/test/TSocketInterruptTest.cpp
b/lib/cpp/test/TSocketInterruptTest.cpp
index 366242f..a546c23 100644
--- a/lib/cpp/test/TSocketInterruptTest.cpp
+++ b/lib/cpp/test/TSocketInterruptTest.cpp
@@ -53,6 +53,7 @@ void readerWorkerMustThrow(std::shared_ptr<TTransport> tt) {
BOOST_AUTO_TEST_CASE(test_interruptable_child_read) {
TServerSocket sock1("localhost", 0);
sock1.listen();
+ BOOST_CHECK(sock1.isOpen());
int port = sock1.getPort();
TSocket clientSock("localhost", port);
clientSock.open();