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 套接字常见问题解答在第2.7 节中有很长的解释。

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

于 2011-10-14T11:17:18.507 回答