GNU/Linux >> Linux の 問題 >  >> Linux

Python ソケットが接続を正しく閉じない

TIME_WAIT が発生しています 接続されたソケットの状態。ソケットを閉じても、数分間は影響が残ります。この理由と、動作を無効にするために設定できるソケット フラグ (SO_REUSEADDR) については、UNIX ガイドのソケット FAQ で説明されています。

要するに、

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

import sys を追加して、sys.exit() でアプリを終了してみてください。アプリケーションが閉じられたことをシステムが確認するまで、ソケットは予約されたままになります。 sys.exit() でそれについて明示できます

[編集]ああ、わかりました。私は自分自身でソケットにかなり慣れていません。つまり、このシーケンスは安全ではないと言っているのですか?私はそれを行う他の方法を想像することはできません。何らかのテクニックを使って、ある時点でアプリを閉じる必要がありますよね?では、どうすれば正しく行われるのでしょうか?

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

Linux
  1. 方法:Pythonでのソケットプログラミング

  2. MySQLデータベースサーバーへのリモート接続を許可する方法

  3. 接続が開いているか閉じているかを確認しますか? (Linux の C)

  1. Python の open() は、ファイルが存在しない場合、ファイルを作成しません。

  2. 一行FTPサーバー

  3. C でソケット接続を完全に破棄する方法

  1. 修正::LinuxSSHエラー接続が拒否されました

  2. サーバーのMySQLタイムアウトを変更する

  3. UNIXソケット接続のもう一方の端を見つける方法は?