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

Mat*_*att 5 python sockets socketserver

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

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

Mic*_*ior 7

你可以试试atexit模块.

import atexit

function close_socket:
    s.close()

atexit.register(close_socket)
Run Code Online (Sandbox Code Playgroud)

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

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Run Code Online (Sandbox Code Playgroud)