serve_forever

Pepe Aracil pepe en diselpro.com
Jue Mayo 22 17:58:51 CEST 2008


Y si le pones un timeout al socket?

tcpserver_instance.socket.settimeout(5)

En teoria el método handle_request se
sale directamente si captura una excepcion
del tipo socket.error y creo que un
timeout de socket genera este tipo de
excepcion (no lo he probado)


Saludos.


Oswaldo Hernández escribió:
> Pepe Aracil escribió:
>> Hola
>>
>> Si te miras los fuentes del módulo Socketserver
>> y en concreto de la clase BaseServer, veras esto:
>>
>> -- code --
>> def serve_forever(self):
>>         """Handle one request at a time until doomsday."""
>>         while 1:
>>             self.handle_request()
>> ------
>>
>> Solo tienes que crear una clase derivada de TCPServer y
>> sobreescribir el método server_forever.
>>
>> ------ code --
>> def serve_forever(self):
>>         """Handle one request at a time until exit_flag."""
>>         while not exit_flag:
>>             self.handle_request()
>> ------
>>
>>
>>
> 
> Asi es como lo tengo hecho, pero el problema es que no funciona hasta 
> que hay una nueva peticion de conexión.
> 
> Como apaño ademas de establecer el flag tengo que crear un socket en el 
> otro proceso y hacer una conexión al server, y entonces ya funciona lo 
> del flag y termina.
> 
> Estos son los fragmentos del codigo real:
> 
>     def serve_forever(self):
>         while 1:
>             self.Log.debug("handle_request, %s" % self.FinalizarProceso)
> 
>             if self.FinalizarProceso:
>                 break
> 
>             self.handle_request()
> 
>         self.Log.debug("serve_forever, finalizado")
> 
> 
> En el proceso llamado para finalizar los threads:
> 
>         Server.socket.close()
>         # esperar 2 segundos
> 
>         time.sleep(2)
> 
>         # abir conexion al socket para que pare
>         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>         try:
>             s.connect(("localhost", 4069))
>             s.send('Cierrate hijo de p...!')
>             s.close()
>         except:
> 
>             raise
> 
> 
> 
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es