Python [Errno 98] Adresse déjà utilisée


91

Dans mon programme socket Python, j'ai parfois besoin de l'interrompre avec Ctrl-C. Lorsque je fais cela, cela ferme la connexion en utilisant socket.close().

Cependant, lorsque j'essaie de le rouvrir, je dois attendre ce qui semble être une minute avant de pouvoir me connecter à nouveau. Comment fermer correctement une prise? Ou est-ce prévu?

Réponses:


115

Oui, c'est prévu. Ici vous pouvez lire des explications détaillées . Il est possible de remplacer ce comportement en définissant l'option SO_REUSEADDR sur un socket. Par exemple:

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

Étrange. J'ai appelé cela juste avant la liaison et l'erreur se produit toujours. Je dois faire une erreur ailleurs.
byxor

Peu importe, j'ai eu une condition de course bizarre lors de la liaison et de l'arrêt à plusieurs reprises sur des threads séparés pour mes tests automatisés.
byxor

Vous devez importer un module appelé socket.
Bartosz le

30
$ ps -fA | grep python
501 81211 12368   0  10:11PM ttys000    0:03.12  
python -m SimpleHTTPServer

$ kill 81211

1
Malheureusement, cela ne fonctionne pas toujours. C'était ma pensée immédiate lorsque j'ai rencontré ce problème, mais il n'y a pas de processus python à tuer dans mon cas.
Kryten


12

parce que vous essayez d'exécuter le service sur le même port qui est déjà en cours d'exécution.

quelque temps, cela se produit parce que votre service n'est pas arrêté dans la pile de processus. tu dois les tuer

pas besoin d'installer quoi que ce soit ici, c'est la commande d'une ligne pour tuer tous les processus python en cours d'exécution.

pour OS basé sur Linux:

Frapper:

kill -9 $(ps -A | grep python | awk '{print $1}')

Poisson:

kill -9 (ps -A | grep python | awk '{print $1}')

1
A travaillé pour moi Merci!
Code

1
A travaillé pour moi Merci
user007

6

Rien n'a fonctionné pour moi à part exécuter un sous-processus avec cette commande, avant d'appeler HTTPServer(('', 443), myHandler):

kill -9 $(lsof -ti tcp:443)

Bien sûr, ce n'est que pour les OS de type Linux!


5

Une solution simple qui a fonctionné pour moi est de fermer le terminal et de le redémarrer.


4

Tout d'abord, trouvez l'ID de processus python à l'aide de cette commande

ps -fA | grep python

Vous obtiendrez un numéro pid en nommant votre processus python sur la deuxième colonne

Puis tuez le processus en utilisant cette commande

kill -9 pid

0

Vous avez la même erreur:
étapes suivies:
1 - utilisé $ ps -fA | grep python
2 - tué tout le processus
3 - terminal fermé
4 - relancé et lancé l'application (mkchromecast).
5 - n'a pas reçu ce message d'erreur.

J'ai un autre problème. suivi de cela.


0

exécuter la commande

fuser -k (port_number_you_are _trying_to_access)/TCP

exemple pour flacon: fuser -k 5000/tcp

Souvenez-vous également que cette erreur survient lorsque vous interceptez avec ctrl + z. donc pour terminer, utilisez ctrl + c

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.