GNU/Linux >> Linux Esercitazione >  >> Linux

Il socket Python non chiude correttamente la connessione

Stai vivendo il TIME_WAIT stato delle prese collegate. Anche se hai chiuso la presa, ha ancora conseguenze persistenti per un paio di minuti. Le ragioni di ciò, così come un flag di socket che puoi impostare per disabilitare il comportamento (SO_REUSEADDR), sono spiegate nelle FAQ sui socket della guida UNIX.

In breve,

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

Prova ad aggiungere import sys e a terminare la tua app con sys.exit(). Il socket rimane riservato fino a quando il sistema non è soddisfatto che l'applicazione sia chiusa. Puoi essere esplicito al riguardo con sys.exit()

[modifica]Oh, ok. Sono abbastanza nuovo per le prese me stesso. Quindi stai dicendo che questa sequenza non è sicura? Non riesco a immaginare nessun altro modo per farlo. Devi chiudere la tua app ad un certo punto, con qualche tecnica, giusto? Come si fa allora correttamente?

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

Linux
  1. Correzione ::Connessione errore SSH Linux rifiutata

  2. Controlla la connessione aperta o chiusa? (in C in Linux)

  3. open() in Python non crea un file se non esiste

  4. Server FTP a una linea

  5. Come distruggere completamente una connessione socket in C

Come configurare un file server di base utilizzando simpleHTTPserver

Correzione:impossibile stabilire una connessione FTP a un server SFTP in FileZilla

Risoluzione dei problemi:errori di connessione al server

Correzione dell'errore del tubo rotto con la connessione SSH

Come connettersi a SQL Server da Linux

PHPMailer GoDaddy Server Connessione SMTP rifiutata