Problemas con sockets

Miguel Prada miguel.register en gmail.com
Mie Mar 18 13:16:37 CET 2009


[...]

> > tengo una pequeña aplicación que actúa de servidor escuchando por un puerto
> > determinado la llegada de sockets de un cliente. El cliente envía datos, el
> > servidor responde y ambos cierran la conexión (primero un sock.shutdown(1)
> > y luego un sock.close()). Se termina la comunicación y se cierran ambos
> > programas. hasta ahí todo bien, el problema  viene si seguidamente vuelvo a
> > ejecutar el servidor usando el mismo puerto de escucha, el interprete me
> > lanza la siguiente excepción:
> >
> > File "<string>", line 1, in bind
> > socket.error: (98, 'Address already in use')
> >
> > Es como si el puerto estubiera ocupado, sin embargo si hago un fuser
> > 7777/tcp (donde 7777 es el número del puerto) no me devuelve nada. Al cabo
> > de los minutos parece ser que deja de estar en uso el puerto y puedo volver
> > a ejecutar el servidor. Googleando he encontrado una descripción del
> > posible problema:
> > http://hea-www.harvard.edu/~fine/Tech/addrinuse.html<http://hea-www.harvard
> >.edu/%7Efine/Tech/addrinuse.html>y que dan solución añadiendo la línea:
> >
> > sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

[...]

> Yo diria que esto te pasa porque no se cierra el socket, puedes consultar el 
> estado de las conexiones con el comando netstat -a --inet.Lo que no se es el 
> porque ya que no conozco como trabajan los sockets en python

Eso creo, sí, pero en teoría con activar la opción SO_REUSEADDR se
debería resolver el problema. Ocurre lo mismo cuando programas con
sockets en C/C++, no es un problema específico de Python.


------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


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