Cerrando sockets, close_wait

Oswaldo Hernández listas en soft-com.es
Mar Mayo 22 16:58:22 CEST 2007


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.

Lo que desearia es poder comprobar el estado del socket antes de realizar la lectura. No encuentro 
ninguna funcion especifica para esto.

Gracias.




> 
> El Tue, 22 May 2007 16:19:23 +0200
> Oswaldo Hernández <listas en soft-com.es> escribió:
> 
>> Hola a todos,
>>
>> Estoy trabajando en mi primera aplicacion con sockets en python,
>> hasta ahora todo va mas o menos bien ;), excepto:
>>
>> Cuando en el lado del cliente cierro el socket, no llega ninguna
>> interrupcion al servidor, y haciendo un netstat veo que el estado de
>> la conexion se queda en CLOSE_WAIT.
>>
>> Buscando en la red la unica solucion que he visto es utilizando
>> select:
>>
>> sel = select.select([sck], [], [], .1)
>> if sel[0]:
>> 	datos=sck.recv(4096)
>> 	if len(datos) == 0:
>> 		# la conexion ha sido cerrada
>> 		...
>>
>> Es decir, cuando el primero de los valores devueltos por el select
>> tiene valor pero recv no devuelve nada indica que el peer ha cerrado
>> el socket.
>>
>> ¿Es esto correcto?, ¿hay alguna otra forma de hacerlo?
>>
>> Gracias.
>>
> 
> 


-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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