Bucle de lectura de socket en un thread

Ernesto Revilla erny en sicem.biz
Sab Nov 13 01:23:11 CET 2004


Hola,

cuando he estado haciendo cosas parecidas, he llegado a la conclusión de 
mandar una solicitud de cualquier tipo (ej. urllib.open) a ese puerto 
(desde la misma aplicación) para 'desbloquear' la lectura del socket. Sé 
que hay un modo de abrir un socket en modo sin bloquear, pero nunca lo 
he usado.

Erny

aRtS escribió:

>Hola saludos a toda la lista, tengo un problemilla con un bucle de
>lectura de sockets y es el siguiente:
>
>Para facilitarme la tarea de sockets sobre wxWindows en todas las
>aplicaciones que hago,me hice un modulo que al llamarlo crea un socket
>y sus correspondientes funciones, inicia creando el socket despues tu
>llamas la funcion objeto.connect(( ip , puerto)) y este si es
>conectado satisfactoriamente crea un hilo a partir de una funcion que
>entra en un bucle hasta que no lee nada mas.
>Hasta ahi funciona muy bien, el problema viene cuando YO quiero cerrar
>el socket voluntariamente que se queda en espera de la siguiente
>linea:
>self.recv = self.socket.recv(900)
>La pregunta que tengo es:
>Como puedo hacer que cuando cierro el socket ignore la espera de esta orden¿?¿?
>Copio la funcion del bucle:
>:-
>..........
>    thread.start_new_thread( self.read_process, () )
>..........
>    def read_process(self):
>        while self.connected:
>            try:
>                self.recv = self.socket.recv(900)
>            except:
>                break
>            else:
>                self.parent.socket_read()
>
>        try:
>            self.connected = 0
>        except:
>            pass
>        else:
>            self.parent.socket_close()
>;-
>Luego la funcion que utilizo para cerrarlo es:
>;-
>    def sockclose(self):
>        self.connected = 0
>        self.parent.socket_close()
>        try:
>            self.socket.close()
>        except:
>            print 'no se pudo cerrar socket'
>
>Lo que no comprendo es que al llamar la funcion objeto.sockclose() el
>try que cierra el socket lo efectua satisfactoriamente, no salta el
>except, pero el socket sigue abierto y recibe una linea mas antes de
>finalizar el bucle.
>
>Alguien sabria como romper ese bucle a la espera de lectura???
>Alguien sabe como matar el thread¿?
>
>Muchas gracias anticipadas.
>_______________________________________________
>Python-es mailing list
>Python-es en aditel.org
>http://listas.aditel.org/listinfo/python-es
>
>  
>



---
avast! Antivirus: Saliente mensaje limpio.
Base de datos de Virus (VPS): 0443-2, 21/10/2004
Comprobado en: 13/11/2004 1:23:16
avast! tiene los derechos reservados (c) 2000-2004 ALWIL Software.
http://www.avast.com




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