如何停止TCPServer,如何删除TIME_WAIT套接字

时间:2013-10-15 10:23:54

标签: python sockets ubuntu tcpserver

我写了两个班级

class RequestHandler(http.server.SimpleHTTPRequestHandler):

class Server(socketserver.TCPServer):

以便唯一的服务器可以处理常规的browser-,ajax-和websocket请求。 它工作正常。

我只是找不到终止服务器的方法。所以我杀了这个过程。

[编辑]我需要在收到浏览器的关闭请求时关闭服务器。我尝试设置self.__shutdown_request True,但它不起作用。

此外,在我关闭浏览器并终止进程后,netstat告诉我有一些套接字 使用服务器端口仍处于活动状态,具有TIME_WAIT状态。因此,我必须等待它们再次使用相同的端口才能消失。

如何终止服务器?

有没有办法删除这些套接字?

2 个答案:

答案 0 :(得分:3)

可能您可以尝试方法Server.shutdown来关闭服务器。正如Python文档所解释的那样,此方法告诉Server.serve_forever循环停止并等待它。 顺便说一句,尽管您可以设置SO_LINGER以避免TCP套接字的TIME_WAIT状态,但不鼓励这样做。另一种方法是在绑定服务器端口之前设置SO_REUSEADDR。

答案 1 :(得分:0)

在终端窗口中使用以下命令杀死 TCP 端口 28355 以停止 TIME_WAIT 套接字:

npx kill-port 28355

在我的 python 套接字服务器脚本中,我使用了以下几行:

import os os.system("npx kill-port 28355")

此命令解决了“地址已在使用中”错误。这是我找到的所有其他解决方案中唯一解决错误的解决方案,例如启用 SO_REUSEADDR 选项。