2010-05-04 7 views
3

J'ai un serveur/client simple. et j'utilise le netcat en tant que client pour tester le serveur. si j'arrêter le serveur avant la sortie du client, je ne pourrai pas recommencer le serveur pendant un certain temps et je vais cette erreur: « [Errno 98] Adresse déjà utilisée »Quelle est la bonne façon de fermer une socket en python 2.6?

mais si je ferme le client d'abord, puis le serveur s'arrête, je n'aurai pas ce problème.

mon socket serveur fonctionne comme ceci:

try: 
    s=socket 
    s.bind(..) 
    s.listen(1) 
    conn,addr=s.accept() 
finally: 
    conn.close() 
    s.close() 

il me semble que le serveur n'a pas fermé la prise correctement. mais je ne sais pas comment résoudre ce problème.

Répondre

9

Vous fermez bien la prise. Cependant, le socket continue d'utiliser des ressources pendant quelques minutes après la fermeture du socket, de sorte que si l'extrémité distante a manqué un paquet, le paquet peut être renvoyé.

Vous devriez être en mesure de travailler autour d'elle en appelant les éléments suivants avant d'appeler bind:

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 

qui indiquera le système d'exploitation que vous souhaitez autoriser plusieurs liaisons de la prise.

Questions connexes