Yes, I did eventually discover the setKeepAlive() call, thank you!
Bevis -----Original Message----- From: Gajanan H [mailto:[email protected]] Sent: 13 April 2017 13:23 To: [email protected] Subject: Re: thrift C++ server timeout client connections Hi Bevis, You can enable keep-alive on the server. Here is some sample C++ code. auto tServerSocket = new apache::thrift::transport::TServerSocket (port); tServerSocket->setKeepAlive (true); This enables tcp keep-alive <http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/usingkeepalive.html > on the server with default timeouts. If you want to set your own timeout values, you can patch thrift and set them. Here is some sample code. In file lib/cpp/src/thrift/transport/TSocket.cpp #ifdef __linux__ if(keepAlive_){ /** * Set TCP_KEEPIDLE */ value = 1; ret = setsockopt(socket_, SOL_TCP, TCP_KEEPIDLE, const_cast_sockopt(&value), sizeof(value)); if (ret == -1) { int errno_copy = THRIFT_GET_SOCKET_ERROR; // Copy THRIFT_GET_SOCKET_ERROR because we're allocating memory. GlobalOutput.perror("TSocket::setKeepAlive() setsockopt(TCP_KEEPIDLE) " + getSocketInfo(), errno_copy); } /** * Set TCP_KEEPINTVL */ value = 1; ret = setsockopt(socket_, SOL_TCP, TCP_KEEPINTVL, const_cast_sockopt(&value), sizeof(value)); if (ret == -1) { int errno_copy = THRIFT_GET_SOCKET_ERROR; // Copy THRIFT_GET_SOCKET_ERROR because we're allocating memory. GlobalOutput.perror("TSocket::setKeepAlive() setsockopt(TCP_KEEPINTVL) " + getSocketInfo(), errno_copy); } /** * Set TCP_KEEPCNT */ value = 3; ret = setsockopt(socket_, SOL_TCP, TCP_KEEPCNT, const_cast_sockopt(&value), sizeof(value)); if (ret == -1) { int errno_copy = THRIFT_GET_SOCKET_ERROR; // Copy THRIFT_GET_SOCKET_ERROR because we're allocating memory. GlobalOutput.perror("TSocket::setKeepAlive() setsockopt(TCP_KEEPCNT) " + getSocketInfo(), errno_copy); } } #endif Hope this helps! Regards, Gajanan On Wed, Mar 29, 2017 at 2:35 PM, [email protected] < [email protected]> wrote: > I am using apache thrift 0.9.3 in C++ with a TThreadPoolServer with a > 15 thread limit. > > I am running into a problem whereby a remote client may connect to my > server, and so use up a thread, but then never disconnect. That > connection thread on the server then remains "in use" forever. If this > happens 15 times, my server blocks up. > > Is there any way to tell the server to disconnect a client after a set > time? This seems to be such an obvious problem, I feel there must be a > solution which I've missed. > > > > Bevis > > Please consider the environment before printing this email. This > message should be regarded as confidential. If you have received this > email in error please notify the sender and destroy it immediately. > Statements of intent shall only become binding when confirmed in hard > copy by an authorised signatory. The contents of this email may relate > to dealings with other companies under the control of BAE Systems > Applied Intelligence Limited, details of which can be found at > http://www.baesystems.com/Busi nesses/index.htm. > Please consider the environment before printing this email. This message should be regarded as confidential. If you have received this email in error please notify the sender and destroy it immediately. Statements of intent shall only become binding when confirmed in hard copy by an authorised signatory. The contents of this email may relate to dealings with other companies under the control of BAE Systems Applied Intelligence Limited, details of which can be found at http://www.baesystems.com/Businesses/index.htm.
