From 32e7b2c7e312b77a95c0550840b464b585536cd1 Mon Sep 17 00:00:00 2001 From: Jake Farrell Date: Wed, 14 Sep 2011 06:19:10 +0000 Subject: [PATCH] THRIFT-1335: Add accept timeout to TServerSocket Client: cpp Patch: Dave Watson Added an accept timeout to the TServerSocket poll loop git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1170443 13f79535-47bb-0310-9956-ffa450edef68 --- lib/cpp/src/transport/TServerSocket.cpp | 12 +++++++++++- lib/cpp/src/transport/TServerSocket.h | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/cpp/src/transport/TServerSocket.cpp b/lib/cpp/src/transport/TServerSocket.cpp index 82516ff4..efe08fe1 100644 --- a/lib/cpp/src/transport/TServerSocket.cpp +++ b/lib/cpp/src/transport/TServerSocket.cpp @@ -63,6 +63,7 @@ TServerSocket::TServerSocket(int port) : acceptBacklog_(1024), sendTimeout_(0), recvTimeout_(0), + accTimeout_(-1), retryLimit_(0), retryDelay_(0), tcpSendBuffer_(0), @@ -76,6 +77,7 @@ TServerSocket::TServerSocket(int port, int sendTimeout, int recvTimeout) : acceptBacklog_(1024), sendTimeout_(sendTimeout), recvTimeout_(recvTimeout), + accTimeout_(-1), retryLimit_(0), retryDelay_(0), tcpSendBuffer_(0), @@ -109,6 +111,10 @@ void TServerSocket::setRecvTimeout(int recvTimeout) { recvTimeout_ = recvTimeout; } +void TServerSocket::setAcceptTimeout(int accTimeout) { + accTimeout_ = accTimeout; +} + void TServerSocket::setRetryLimit(int retryLimit) { retryLimit_ = retryLimit; } @@ -342,7 +348,11 @@ shared_ptr TServerSocket::acceptImpl() { fds[1].fd = intSock2_; fds[1].events = POLLIN; } - int ret = poll(fds, 2, -1); + /* + TODO: if EINTR is received, we'll restart the timeout. + To be accurate, we need to fix this in the future. + */ + int ret = poll(fds, 2, accTimeout_); if (ret < 0) { // error cases diff --git a/lib/cpp/src/transport/TServerSocket.h b/lib/cpp/src/transport/TServerSocket.h index 40a1148e..280ee698 100644 --- a/lib/cpp/src/transport/TServerSocket.h +++ b/lib/cpp/src/transport/TServerSocket.h @@ -43,6 +43,8 @@ class TServerSocket : public TServerTransport { void setSendTimeout(int sendTimeout); void setRecvTimeout(int recvTimeout); + void setAcceptTimeout(int accTimeout); + void setRetryLimit(int retryLimit); void setRetryDelay(int retryDelay); @@ -65,6 +67,7 @@ class TServerSocket : public TServerTransport { int acceptBacklog_; int sendTimeout_; int recvTimeout_; + int accTimeout_; int retryLimit_; int retryDelay_; int tcpSendBuffer_; -- 2.17.1