退出/崩溃时关闭服务器套接字

时间:2011-10-14 11:11:38

标签: python sockets socketserver

我正在学习如何在python中使用套接字,并且经常在我的程序崩溃或者我在Ctrl + C时服务器套接字以某种方式继续监听端口。这显然会阻止程序在再次启动时监听该端口,因此我必须不断更改它。

我猜我需要在某处做socket.close(),但在哪里?

2 个答案:

答案 0 :(得分:8)

您可以尝试atexit模块。

import atexit

function close_socket:
    s.close()

atexit.register(close_socket)

如果问题是端口在测试期间可用延迟,我建议设置SO_REUSEADDR,这将允许端口立即再次绑定,而不是等待TCP堆栈上的超时。

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

答案 1 :(得分:1)

终止程序会使其所有套接字自动关闭。但是,TCP端口在此之后仍然保持使用状态。 UNIX socket FAQ在2.7节中有很长的解释。

出于测试目的,最好是要求一个任意端口(或要求连续的端口,如8000,8001,8002,......)并在控制台中输出该端口。