Python - Problemas con Threadin+socket

 
Vista:

Problemas con Threadin+socket

Publicado por Lluis (1 intervención) el 03/07/2007 01:28:13
Hola, tengo un problema que no se muy bien de donde viene, si del socket o del thread...

#!/usr/bin/python
#pe.py
import socket
import thread
import threading
import struct
import sys
import select
##
class psock ( threading.Thread ):
v = ''
vlock = threading.Lock()
id = 0

def __init__(self,clntsock):
print "Creado objeto"
threading.Thread.__init__(self)
self.myid = psock.id
psock.id += 1
self.myclntsock = clntsock

def run(self):
while 1:
print "en el while"
k = self.myclntsock.recv(1)
if k == '': break
psock.vlock.acquire()
psock.v += k
psock.vlock.release()
self.myclntsock.send(psock.v)
self.myclntsock.close()

##Fin


##Clase Nodo (Crea una conexion con nuestro protocolo)
class node:
#nombre, numero de escuchas, puerto
def __init__( self, name, listen=5, port=8001):
print "iniciado un node"
self.maxin = int(listen)
self.serverport = int(port)
self.SF = True #Flag de estado, a cero cierra el bucle principal de la clase
#inicializar representacion de la red, sera un vector de vectores [psock]
self.peers = []
s = self.createserver( self.serverport )
s.settimeout(2)
thread.start_new_thread ( self.aceptconn, (s, ) )
##bucle del selec
def aceptconn( self, sock ):

while self.SF and (self.maxin > 0):
try:
clientsock, clientaddr = sock.accept()
clientsock.settimeout(None)
c = psock(sock)
c.start()
self.maxin -= 1
except KeyboardInterrupt:
self.SF = False
continue
except:
continue
s.close()

def createserver( self, port, listens=5 ):
print "servidor a la escucha"
s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
s.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )
s.bind( ( '', port ) )
s.listen( listens )
return s

el codigo es mas o menos ese, y al ejecutarlo en el interprete con las siguientes ordenes:

import pe

a = pe.node("algo")

y conectar un cliente telnet a ese puerto, cuando intenta leer me devuelve:

Traceback (most recent call last):
File "threading.py", line 460, in __bootstrap
self.run()
File "pe.py", line 25, in run
k = self.myclntsock.recv(1)
timeout: timed out

Ya no sé que probar, si alguien me echa una mano se lo agradecere un monton
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder