thrift-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gajanan H <grhegd...@gmail.com>
Subject Re: thrift C++ server timeout client connections
Date Thu, 13 Apr 2017 12:22:43 GMT
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, bevis.peters@baesystems.com <
bevis.peters@baesystems.com> 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.
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message