Problemas con sockets

Arnau Sanchez pyarnau en gmail.com
Mie Mar 18 14:54:32 CET 2009


Luis Orellana Orihuela wrote:

> 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)

En efecto, SO_REUSEADDR es útil para asegurarte de que podrás hacer un bind a un
puerto aunque la misma aplicación haya acabado previamente de mala manera. No
obstante, en este caso yo diría que te enmascararía un problema en el código: si
el programa servidor acaba correctamente, no hay razón para que el puerto no
quede libre. Sería bueno ver algo más de código...

No digo que sea la raíz del problema, pero en general no es necesario hacer
shutdown del socket, ver ejemplos en:

http://docs.python.org/library/socket.html

Por último, excepto en casos señalados, en Python es preferible desarrollar el
servidor con librerías de más alto nivel, te simplifican mucho el trabajo:

http://docs.python.org/library/socketserver.html

arnau

-- 
Desarrollador freelance
http://www.arnau-sanchez.com
_______________________________________________
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