我正在学习如何在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,...)并在控制台中输出该端口。