GNU/Linux >> Znalost Linux >  >> Linux

Python socket neuzavře připojení správně

Dochází k TIME_WAIT stav připojených zásuvek. I když jste zavřeli zásuvku, stále to má několik minut přetrvávající následky. Důvody tohoto stavu, stejně jako příznak soketu, který můžete nastavit, abyste chování zakázali (SO_REUSEADDR), jsou vysvětleny v příručce UNIX soket FAQ.

Zkrátka

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

Zkuste přidat import sys a ukončit aplikaci pomocí sys.exit(). Soket zůstane rezervován, dokud se systém neujistí, že je aplikace uzavřena. Můžete to být explicitní pomocí sys.exit()

[edit] Oh, dobře. Sám jsem v zásuvkách docela nový. Takže říkáte, že tato sekvence není bezpečná? Nedovedu si představit jiný způsob, jak to udělat. V určitém okamžiku musíte aplikaci zavřít pomocí určité techniky, že? Jak se to tedy správně dělá?

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

Linux
  1. Zkontrolujte připojení otevřené nebo zavřené? (v C v Linuxu)

  2. open() v Pythonu nevytvoří soubor, pokud neexistuje

  3. Jednořádkový FTP server

  1. Jak úplně zničit připojení zásuvky v C

  2. Jak odeberu připojení soketu CLOSE_WAIT

  3. Vytváření raw socketu v Pythonu bez práv roota

  1. Jak zvýšit časový limit připojení SSH

  2. Připojení SMTP serveru PHPMailer GoDaddy zamítnuto

  3. Jak najít druhý konec připojení unixové zásuvky?