diff options
author | Kevin Wojniak <kainjow@users.noreply.github.com> | 2021-08-16 23:05:42 +0200 |
---|---|---|
committer | Jens Geyer <jensg@apache.org> | 2021-10-21 22:57:04 +0200 |
commit | 839a1daf5a2d99307e4a3175a32fb2b7bf9c6175 (patch) | |
tree | 9566ae6661ea794da260dee95f5e6f0e27fd8ad3 | |
parent | 0f760537c3f17502e7694c61417dafc02fc3aa3a (diff) | |
download | thrift-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.cpp | 11 | ||||
-rw-r--r-- | lib/cpp/src/thrift/transport/TServerSocket.cpp | 11 |
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) { |