summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Wojniak <kainjow@users.noreply.github.com>2021-08-16 23:05:42 +0200
committerJens Geyer <jensg@apache.org>2021-10-21 22:57:04 +0200
commit839a1daf5a2d99307e4a3175a32fb2b7bf9c6175 (patch)
tree9566ae6661ea794da260dee95f5e6f0e27fd8ad3
parent0f760537c3f17502e7694c61417dafc02fc3aa3a (diff)
downloadthrift-839a1daf5a2d99307e4a3175a32fb2b7bf9c6175.tar.gz
THRIFT-5456 Disable SIGPIPE on TSocketServer
CLient: cpp Patch: Kevin Wojniak This closes #2440
-rw-r--r--lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp11
-rw-r--r--lib/cpp/src/thrift/transport/TServerSocket.cpp11
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp b/lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp
index 28d94ce2e..3196c4782 100644
--- a/lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp
@@ -280,6 +280,17 @@ void TNonblockingServerSocket::_setup_sockopts() {
errno_copy);
}
+#ifdef SO_NOSIGPIPE
+ if (-1 == setsockopt(serverSocket_, SOL_SOCKET, SO_NOSIGPIPE, &one, sizeof(one))) {
+ int errno_copy = THRIFT_GET_SOCKET_ERROR;
+ GlobalOutput.perror("TNonblockingServerSocket::listen() setsockopt() SO_NOSIGPIPE", errno_copy);
+ close();
+ throw TTransportException(TTransportException::NOT_OPEN,
+ "Could not set SO_NOSIGPIPE",
+ errno_copy);
+ }
+#endif
+
// Set NONBLOCK on the accept socket
int flags = THRIFT_FCNTL(serverSocket_, THRIFT_F_GETFL, 0);
if (flags == -1) {
diff --git a/lib/cpp/src/thrift/transport/TServerSocket.cpp b/lib/cpp/src/thrift/transport/TServerSocket.cpp
index ede6c9bde..25ec789e0 100644
--- a/lib/cpp/src/thrift/transport/TServerSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TServerSocket.cpp
@@ -313,6 +313,17 @@ void TServerSocket::_setup_sockopts() {
throw TTransportException(TTransportException::NOT_OPEN, "Could not set SO_LINGER", errno_copy);
}
+#ifdef SO_NOSIGPIPE
+ if (-1 == setsockopt(serverSocket_, SOL_SOCKET, SO_NOSIGPIPE, &one, sizeof(one))) {
+ int errno_copy = THRIFT_GET_SOCKET_ERROR;
+ GlobalOutput.perror("TServerSocket::listen() setsockopt() SO_NOSIGPIPE", errno_copy);
+ close();
+ throw TTransportException(TTransportException::NOT_OPEN,
+ "Could not set SO_NOSIGPIPE",
+ errno_copy);
+ }
+#endif
+
// Set NONBLOCK on the accept socket
int flags = THRIFT_FCNTL(serverSocket_, THRIFT_F_GETFL, 0);
if (flags == -1) {