7

Pythonでソケットを使用する方法を学んでいますが、プログラムがクラッシュしたり、Ctrl + Cキーを押したりすると、サーバーソケットがポートでリッスンしたままになることがよくあります。これにより、プログラムが再起動したときにそのポートでリッスンすることが明らかに停止するため、変更を続ける必要があります。

どこかで socket.close() を実行する必要があると思いますが、どこで?

4

2 に答える 2

10

atexitモジュールを試すことができます。

import atexit

function close_socket:
    s.close()

atexit.register(close_socket)

問題がテスト中にポートが使用可能になるのが遅れている場合はSO_REUSEADDR、TCP スタックでタイムアウトを待つのではなく、すぐにポートを再度バインドできるように設定することをお勧めします。

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
于 2011-10-14T11:49:27.313 に答える
1

プログラムを終了すると、そのすべてのソケットが自動的に閉じられます。ただし、その後も TCP ポートは引き続き使用されます。UNIX ソケット FAQのセクション 2.7 には、非常に長い説明があります。

テスト目的では、任意のポートを要求 (または 8000、8001、8002 などの連続するポートを要求) し、そのポートをコンソールに出力するのが最善の方法です。

于 2011-10-14T11:17:18.507 に答える