[Twisted-Python] Re: How to detect dead client connections in twisted

Gabriel Rossetti mailing_lists at evotex.ch
Tue Jun 3 08:10:45 EDT 2008


Yes, I found that in the meantime, but I tried it and it didn't work. 
Sometimes when the connection is closed abruptly, the server doesn't 
detect the lose. I looked at the oscar protocol implementation and they 
have an application level keepalive, thus I though maybe it had to be 
done that way and the server verifies every x seconds or minutes if it 
hasn't received anything from a client, it removes it from it's 
connected list. So Does anyone know how to deal with this problem?

Gabriel

Alvin Delagon wrote:
> Problem solved! I digged through the twisted.internet source codes and 
> found this facility:
>
>  def setTcpKeepAlive(self, enabled):
>         self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 
> enabled)
>
> I modifying the simple twisted server:
>
> #!/usr/bin/python
> from twisted.internet import protocol
> from twisted.internet import reactor
>
> class EchoProtocol(protocol.Protocol):
>     def __init__(self):
>         pass
>
>     def connectionMade(self):
>         print "Client Connected Detected!"
>         ### enable keepalive
>         self.transport.setTcpKeepAlive(1)
>
>     def connectionLost(self, reason):
>         print "Client Connection Lost!"
>
>     def dataReceived(self, data):
>         self.transport.write(data)
>
>
> factory = protocol.Factory()
> factory.protocol = EchoProtocol
> reactor.listenTCP(8000, factory)
> reactor.run()
>
> Now the server is aware of keepalive timeouts now. Might as well use 
> it in my xmpp server. :)
>
>
> ---
> Alvin Delagon
>
>
> On Tue, Jun 3, 2008 at 3:21 PM, Alvin Delagon <adelagon at gmail.com 
> <mailto:adelagon at gmail.com>> wrote:
>
>     Yes it supposed to be handled by the tcp_keepalive itself (as I
>     assumed). The weird thing was that we had this configuration:
>
>     Ubuntu Linux Server 2.6.15-26
>     tcp_keepalive_time 7200
>     tcp_keepalive_probes 9
>     tcp_keepalive_intvl 75
>
>     I have an XMPP client last sent a packet to the server at May 29
>     15:57:25 telling that it will enter an idle state. On May 30
>     approx 08:00:00 I shut down my PC which hosts my XMPP client thus
>     causing a half-opened state. The next day (17:41:11) while
>     checking the logs, its still in half-opened state and my server
>     still thinks that I'm online. It seems that tcp_keepalive kernel
>     feature that's supposed to run every 2 hours didn't kick in.
>
>     ---
>     Alvin Delagon
>
>
>     On Tue, Jun 3, 2008 at 2:42 PM, Gabriel Rossetti
>     <mailing_lists at evotex.ch> wrote:
>
>
>         Alvin Delagon wrote:
>
>
>             I just recently discovered that it's a TCP half-open
>             socket scenario that can be remedied by monitoring client
>             heartbeats. This is not twisted related issue. Thanks
>             anyway. :)
>
>             Alvin Delagon
>
>
>         Just a question, could setting the tcp keepalive feature on
>         the server side (not sure if that is possible), would that
>         make the server detect that the connection is dead/half-open?
>
>         Gabriel
>
>         _______________________________________________
>         Twisted-Python mailing list
>         Twisted-Python at twistedmatrix.com
>         <mailto:Twisted-Python at twistedmatrix.com>
>         http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
>
>
>
>     -- 
>     http://www.alvinatorsplayground.blogspot.com/
>
>
>
>
> -- 
> http://www.alvinatorsplayground.blogspot.com/
> ------------------------------------------------------------------------
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>   





More information about the Twisted-Python mailing list