[Twisted-web] sendLine and connectionLost question

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Wed May 26 21:38:49 EDT 2010


On 26 May, 10:46 pm, djimenez at unipost.es wrote:
>Hi all,
>
>I'm trying to write a typical chat server application with twisted. At 
>this moment, all is working fine except for some strange behaviour with 
>sendLine and connectionLost funcs. Let me explain the problem:
>
>- I have a server on the internet.
>- I connect two PCs (2 clients) from the same LAN through a router to 
>that server
>- All is working fine until I disconnect the LAN of one of those PC 
>(The client is disconnected but the server doesn't know about it). Just 
>to test a typical wireless disconnection without closing sockets, 
>etc...
>- After disconnecting I try to send some messages through the remaining 
>clients to all clients through this function:
>
>    def sendMessageToAllClients(self, mesg,reqClient):
>        for client in self.clientProtocols:
>            dataLength = str(len(mesg))
>            if (len(dataLength) < 8):
>                dif = 8 - len(dataLength)
>                dataLength = "0"*dif + dataLength
>            print "Enviando a:",str(client)
>            client.sendLine(dataLength+mesg)
>            client.clearLineBuffer()

You shouldn't be calling `client.clearLineBuffer()` here.
>
>As you can see, I send a message to all clients, including the one 
>disconnected because the server doesn't
>know at this moment that the client is "out". I'm able to send 6 or 7 
>messages to the remaining client but
>after that, the connection get lost. I would expect to have a 
>connectionLost with the client offline but actually
>I got a connectionLost in both clients and I don't know why. The server 
>disconnect both clients with "non clean fashion".
>
>Any help or advice would be highly appreciated.

This is how TCP works.  If the remote host stops responding to packets, 
then there's a period of time where the connection still appears to be 
up anyway.  After a TCP-level timer expires, the connection is 
considered lost.

Jean-Paul



More information about the Twisted-web mailing list