我正在學習如何在python中使用套接字,並且經常在我的程序崩潰或者我Ctrl + C服務器套接字以某種方式在端口上保持監聽時。這顯然會阻止程序在重新啓動時監聽該端口,所以我必須不斷改變它。退出/崩潰時關閉服務器套接字
我猜我需要在某處做socket.close(),但在哪裏?
我正在學習如何在python中使用套接字,並且經常在我的程序崩潰或者我Ctrl + C服務器套接字以某種方式在端口上保持監聽時。這顯然會阻止程序在重新啓動時監聽該端口,所以我必須不斷改變它。退出/崩潰時關閉服務器套接字
我猜我需要在某處做socket.close(),但在哪裏?
你可以試試atexit模塊。
import atexit
function close_socket:
s.close()
atexit.register(close_socket)
如果問題是在港口延遲測試期間變得可用,我會建議設置SO_REUSEADDR
這將使該端口馬上又不是綁定的等待TCP堆棧上超時。
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
終止程序會使其所有套接字自動關閉。但是,此後TCP端口仍然保持使用狀態。在第2.7節中,UNIX socket FAQ有很長的解釋。
出於測試目的,最好問一個任意端口(或詢問連續的端口,如8000,8001,8002,...)並在控制檯中輸出該端口。