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?

skylerl
la source

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)
Bartosz
la source
É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
ayoub laaziz
la source
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}')
MohitGhodasara
la source
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!

Mirko
la source
5

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

Siddharth Sethia
la source
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
Abdul Basit
la source
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.

silvertech048
la source
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

Manoj Kumar M
la source