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

标签 python sockets ubuntu tcpserver

我写了我的两个类

class RequestHandler(http.server.SimpleHTTPRequestHandler):

class Server(socketserver.TCPServer):

这样一个独特的服务器就可以处理常规的浏览器、ajax 和 websocket 请求。
它工作正常。

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

[编辑] 当它收到来自浏览器的关闭请求时,我需要关闭服务器。我尝试设置 self.__shutdown_request没错,但它没有用。

此外,在我关闭浏览器并终止进程后,netstat 告诉我有一些套接字
仍然使用服务器的端口,处于 TIME_WAIT 状态。所以我必须等他们死了才能再次使用同一个端口。

如何终止服务器?

有没有办法去掉那些 socket ?

最佳答案

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

关于python - 如何停止 TCPServer,如何删除 TIME_WAIT 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19378809/

相关文章:

python - 将两行中的值附加到 key 对中

python - 什么是 Python 中正确的无限套接字服务器循环

ubuntu - gruntjs 的基本安装问题 - 与 Bootstrap 一起使用

python - Django 测试运行器在 Ubuntu 上的 virtualenv 中失败

c - C 中的代理服务器 - 多个

ruby - 如何在 Ubuntu 上修复 Nokogiri?

Python:同一字符的不同字节值?

python - 饼图作为 networkx 中的节点

Python 何时评估导入的文件?

javascript - 如何在断开连接时获取当前的 socket 空间?