Problemas con sockets

Miguel Prada miguel.register en gmail.com
Mie Mar 18 11:56:50 CET 2009


El mié, 18-03-2009 a las 10:53 +0100, Luis Orellana Orihuela escribió:
> Buenos días lista,
> 
> 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)
> 
> pero al añadirla me salta el siguiente error:
> 
> AttributeError: type object '_socketobject' has no attribute 'SOL_SOCKET'
> si importo tal que así: from socket import *
> 
> o bien :
> 
> NameError: global name 'AF_INET' is not defined  (a la hora de crear el
> socket) si importo así: import socket
> 
> 
> A ver si pueden ayudarme, Gracias.
> 

No sé si será por esto, pero puedes probar lo siguiente:

Usando from socket import *:
	sock = socket(AF_INET) (supongo que lo usas aquí)
	sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)

Usando import socket:
	sock = socket.socket(socket.AF_INET)
	sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)


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