[Python-es] Cerrando sockets, close_wait
dvilla en gmx.net
dvilla en gmx.net
Mar Mayo 22 16:42:50 CEST 2007
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).
Saludos.
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.
>
Más información sobre la lista de distribución Python-es