how to make a SimpleXMLRPCServer abort at CTRL-C under windows

News123 news123 at free.fr
Sat Feb 13 14:55:05 EST 2010


Hi Gabriel,




News123 wrote:
> Hi Gabriel,
> 
> Gabriel Genellina wrote:
>> En Fri, 05 Feb 2010 20:03:51 -0300, News123 <news123 at free.fr> escribió:
>>
>>> I'm using an XMLRPC server under Windows.
>>>
>>> What I wonder is how I could create a server, that can be killed with
>>> CTRL-C
>>>
>>> The server aborts easily with CTRL-BREAK but not with CTRL-C (under
>>> Windows)
>>>
>>> If I press CTRL-C it will only abort when the next RPC call occurs.
>>> It seems it is blocking in the select() call in the handle_request()
>>> function.
>> Python 2.6 and up behaves exactly as you want.
>> On previous versions you may use this:
>>
>> class MyXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer):
>>
>>     ... your methods ...
>>
>>     if not hasattr(SimpleXMLRPCServer.SimpleXMLRPCServer, 'shutdown'):
>>
>>         # pre 2.6
>>         quit = False
>>
>>         def serve_forever(self):
>>             while not self.quit:
>>                 self.handle_request()
>>
>>         def shutdown(self):
>>             self.quit = True
>>
>>         def server_bind(self):
>>             self.socket.settimeout(1.0)
>>             SimpleXMLRPCServer.SimpleXMLRPCServer.server_bind(self)
>>
> 
> Overloading  server_bind() with your version solved my problem.
> 

Overloading server_bind() makes the server killable with ctrl-C.

I noticed however, that I can't use this as solution.
If the bind function sets a time out, then it seems,

that there are regular small time windows, when connecting clients fail.
I don't have the error message any more, but will post it when I capture
the event next time.


bye

N




More information about the Python-list mailing list