Bucle de lectura de socket en un thread

aRtS artstreet en gmail.com
Mar Nov 9 04:03:27 CET 2004


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.




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