GNU/Linux >> Tutoriels Linux >  >> Linux

Le socket Python ne ferme pas correctement la connexion

Vous rencontrez le TIME_WAIT état des prises connectées. Même si vous avez fermé votre socket, cela a encore des conséquences persistantes pendant quelques minutes. Les raisons de cela, ainsi qu'un indicateur de socket que vous pouvez définir pour désactiver le comportement (SO_REUSEADDR), sont expliqués dans la FAQ du socket du guide UNIX.

En bref,

server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(...)
...

Essayez d'ajouter import sys et de terminer votre application avec sys.exit(). Le socket reste réservé jusqu'à ce que le système soit convaincu que l'application est fermée. Vous pouvez être explicite à ce sujet avec sys.exit()

[modifier] Ah d'accord. Je suis moi-même assez novice en matière de sockets. Donc vous dites que cette séquence n'est pas sûre ? Je ne peux pas imaginer une autre façon de le faire. Vous devez fermer votre application à un moment donné, avec une certaine technique, non ? Comment est-ce correctement fait alors ?

server.shutdown(socket.SHUT_RDWR) 
server.close()
sys.exit()

Linux
  1. Correction ::Erreur de connexion Linux SSH refusée

  2. Vérifier la connexion ouverte ou fermée ? (en C sous Linux)

  3. open() en Python ne crée pas de fichier s'il n'existe pas

  4. Connexion SMTP du serveur PHPMailer GoDaddy refusée

  5. Comment trouver l'autre extrémité de la connexion socket unix?

Comment configurer un serveur de fichiers de base à l'aide de simpleHTTPserver

Correction :Impossible d'établir une connexion FTP avec un serveur SFTP dans FileZilla

Dépannage :erreurs de connexion au serveur

Correction d'une erreur de tuyau cassé avec une connexion SSH

Comment se connecter à SQL Server à partir de Linux

Création d'un socket brut en Python sans privilèges root