Hi, On Thu, Jan 15, 2009 at 1:58 PM, Jean-Paul Calderone <exar...@divmod.com>wrote:
> On Thu, 15 Jan 2009 11:44:44 +0100, Alessio Pace <alessio.p...@gmail.com> > wrote: > >> Hi, >> >> I would like to have a client connect via TCP to a server (say, server >> "A"), >> then the client close the connection and connect via TCP to another server >> (say, server "B") using the same TCP port that was bound locally while >> connecting to "A". And then this done over and over again switching from B >> to A to B etc.. >> >> The fact is that it all works if both the client and the server do >> transport.loseConnection() before the client tries to connect to the other >> server from the same local port, instead if *only* the client does >> transport.loseConnection(), I obtain: >> >> [Failure instance: Traceback (failure with no frames): <class >> >>> 'twisted.internet.error.ConnectBindError'>: Couldn't bind: 98: Address >>> already in use. >>> >> >> >> which it is strange to me as the next connectTCP() attempt is called in >> the >> connectionLost() method of the client, so the socket should be closed >> already. >> > > This is because the client connection goes into the CLOSE_WAIT state > instead > of really closing all the way right away. Google for "tcp state diagram" > and take a look at how a socket can close - notice that of the two paths > there are to get to CLOSED, only one of them goes through CLOSE_WAIT. > > There are ways to change this (on most platforms, you can reduce the amount > of time a socket spends in CLOSE_WAIT before going to CLOSED), but it may > not > be a good idea to use them. The CLOSE_WAIT state helps make sure that all > data is delivered to the right TCP connection and not a different, > unrelated > TCP connection by accident. > > Jean-Paul Thank you very much Jean-Paul, this answer my issue. And sorry for having doubted of Twisted for a moment ;-) Regards, Alessio Pace.
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python