为什么在我可以重新使用打开的端口之前会有时间延迟?
Why are there a time delay before I can reuse a opened port?
当我在 python
中使用套接字进行一些编程时
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen()
s.settimeout(0.1)
在退出问题之前不关闭套接字,端口将在短时间内不可用。
我明白我应该在程序退出或关闭之前正确关闭套接字。但是,在开发过程中,有些情况下程序会 crash/exit 我无法处理套接字。
为什么在我可以再次使用该端口之前会有时间延迟?我该如何避免此类问题?
这是因为 TCP 的工作方式。从内存来看,连接状态是 TIME WAIT 状态。
它的目的是防止延迟的数据包到达稍后的流。
打开套接字时设置SO_REUSEADDR选项修复了这个问题。在这里查看答案:
Python: Binding Socket: "Address already in use"
当我在 python
中使用套接字进行一些编程时s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen()
s.settimeout(0.1)
在退出问题之前不关闭套接字,端口将在短时间内不可用。
我明白我应该在程序退出或关闭之前正确关闭套接字。但是,在开发过程中,有些情况下程序会 crash/exit 我无法处理套接字。
为什么在我可以再次使用该端口之前会有时间延迟?我该如何避免此类问题?
这是因为 TCP 的工作方式。从内存来看,连接状态是 TIME WAIT 状态。
它的目的是防止延迟的数据包到达稍后的流。
打开套接字时设置SO_REUSEADDR选项修复了这个问题。在这里查看答案: Python: Binding Socket: "Address already in use"