KeyboardInterrupt catch does not shut down the socketserver
descentspb at gmail.com
Sat May 16 08:40:26 CEST 2009
Gabriel Genellina wrote:
> En Fri, 15 May 2009 09:04:05 -0300, Igor Katson escribió:
>> Lawrence D'Oliveiro wrote:
>>> In message <mailman.185.1242375959.8015.python-list at python.org>,
>>> Igor Katson wrote:
>>>> Lawrence D'Oliveiro wrote:
>>>>> In message <mailman.183.1242371089.8015.python-list at python.org>,
>>>>> Igor Katson wrote:
>>>>>> I have problems in getting a SocketServer to shutdown.
>>>>> Do you want to do a shutdown or a close?
>>>> I want the server close the socket ...
>>> You want to do a close, do a close, not a shutdown
>> Shutdown implies closing the listening socket, doesn't it?
> No (perhaps it should, but that is another issue). There is a
> documentation bug; BaseServer.shutdown is documented as "Tells the
> serve_forever() loop to stop and waits until it does." 
> The docstring is much more explicit: """Stops the serve_forever loop.
> Blocks until the loop has finished. This must be called while
> serve_forever() is running in another thread, or it will deadlock."""
> So, if you have a single-threaded server, *don't* use shutdown(). And, to
> orderly close the listening socket, use server_close() instead. Your code
> would become:
> from SocketServer import TCPServer, BaseRequestHandler
> server = TCPServer(('localhost',1234), BaseRequestHandler)
> except KeyboardInterrupt:
> print "^C detected"
> print "server_close()"
> print "bye"
> (I've opened http://bugs.python.org/issue6031 )
Thanks, Gabriel, that's exactly what I was waiting for.
More information about the Python-list