首页 > 解决方案 > 为什么在我可以重用打开的端口之前会有时间延迟?

问题描述

当我在 python 中使用套接字进行一些编程时

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen()
s.settimeout(0.1)

在退出问题之前不关闭套接字,端口将在短时间内不可用。

我了解我应该在程序退出或关闭之前正确关闭套接字。但是,在开发过程中,有时程序会在我处理套接字之前崩溃/退出。

为什么在我可以再次重用端口之前会有时间延迟?以及如何避免此类问题?

标签: pythonsocketsport

解决方案


这是因为 TCP 的工作方式。从内存中,连接状态是 TIME WAIT 状态。

它的目的是防止延迟的数据包到达后面的流。

打开套接字时设置 SO_REUSEADDR 选项可以解决此问题。在此处查看答案: Python:绑定套接字:“地址已在使用中”


推荐阅读