[Twisted-Python] unlistenTCP not working?

Jp Calderone exarkun at intarweb.us
Thu Jul 24 11:55:57 MDT 2003


On Thu, Jul 24, 2003 at 06:15:28PM +0100, Michael Porter wrote:
> Hi,
> 
> I'm having a problem with unlistenTCP - it doesn't seem to work if
> application.listenTCP was called after the reactor is started. Am I missing
> something here or is this a bug? See test code below for demonstration...
> 
> def listen(application, port):
>     from twisted.web import server, resource
>     print "called listen %d" % port
>     application.listenTCP(port, server.Site(resource.Resource()))
> 
> def unlisten(application, port):
>     print "called unlisten %d" % port
>     application.unlistenTCP(port)
> 
> def test(listenFirst):
>     from twisted.python import log
>     import sys
>     log.startLogging(sys.stdout, 0)
>     from twisted.internet import app, reactor
>     application = app.Application("test")
>     if listenFirst:
>         listen(application, 8080)
>     else:
>         reactor.callLater(0, listen, application, 8080)
>     reactor.callLater(5, unlisten, application, 8080)
>     application.run(save=0)
> 
> If you call test(listenFirst = 1) then all works as expected (log shows it
> starts listening immediately and stops after 5 secs). But if you start
> listening by scheduling a call after application.run (call test(listenFirst
> = 0)) the listenTCP works but when unlisten is called 5 secs later it
> doesn't seem to stop listening and nothing appears in the log.
> 
> (I'm running on Windows with twisted 1.0.6)
> 
> Any ideas? Thanks,
> 

  I believe this is somewhat intentional.  When the reactor is running,
listenXYZ() return Port objects which have a `stopListening' method.  It is
expected that listeners added while the application is running will have
this port object stashed away by the user code and, when the time comes,
have their `stopListening' method called.

  In practice, this can be somewhat difficult to manage, and is a good
reason to use ApplicationServices to manage listeners and connectors.

  I'm not sure if this could be "fixed", since it has behaved this way for a
long time, and some applications may depend on the behavior.

  Jp

-- 
"Minerals are inexhaustible and will never be depleted. A stream of
investment creates additions to proved reserves, a very large in-ground
inventory, constantly renewed as it is extracted... How much was in the
ground at the start and how much will be left at the end are unknown and
irrelevant."  -- Morry Adelman, World Renowned Economist
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: </pipermail/twisted-python/attachments/20030724/bf8f9788/attachment.sig>


More information about the Twisted-Python mailing list