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