[Python-es] Cerrando sockets, close_wait

dvilla en gmx.net dvilla en gmx.net
Mar Mayo 22 18:36:38 CEST 2007


El Tue, 22 May 2007 17:59:09 +0200
Oswaldo Hernández <listas en soft-com.es> escribió:

> dvilla en gmx.net escribió:
> > El Tue, 22 May 2007 16:58:22 +0200
> > Oswaldo Hernández <listas en soft-com.es> escribió:
> > 
> >> dvilla en gmx.net escribió:
> >>> Hola:
> >>>
> >>> socket.recv(n) devuelve como mucho n bytes, pero puede devolver
> >>> menos. 
> >>>
> >>> Si no hay datos disponibles para leer, pero la conexión sigue
> >>> activa recv() bloquea. Pero si recv() devuelve '', es decir,
> >>> cadena vacía, significa que el otro extremo de la conexión cerró
> >>> el socket, al menos para escritura. No hace falta usar select()
> >>> para esto, al menos con sockets bloqueantes (que lo son por
> >>> defecto).
> >>>
> >> Si, pero me gustaria utilizar sockets no bloqueantes, entonces el
> >> recv puede devolver cero bytes al llegar el timeout.
> > 
> > ¿Por qué quieres usar sockets no bloqueantes? Suelen traer muchos
> > más problemas que ventajas.
> > 
> 
> Debido a que utilizo mi propio protocolo entre el cliente y servidor
> me interesa que no bloqueen, otro motivo es el que detalla el link
> que me indicas en el apartado 'Cuando los sockets mueren'.
> 
> 
> 
> >> Lo que desearia es poder comprobar el estado del socket antes de
> >> realizar la lectura. No encuentro ninguna funcion especifica para
> >> esto.
> > 
> > Mira
> > http://wiki.python.org/moin/HowTo/Sockets?highlight=%28socket%29 
> 
> 
> Saludos,
> 


Pues como habrás visto, si necesitas sockets no bloqueantes, no te
quedan muchas opciones a parte de select() o poll()

Saludos



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