gpt4 book ai didi

Python 套接字并没有真正关闭

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:30 27 4
gpt4 key购买 nike

我的主函数中有以下代码:

def main():
server = socket.socket();
server.bind((address, port))
server.listen(1)

sock, addr = server.accept()
try:
while True:
message = sock.recv(buffer_size)
# Do some stuff...
sock.send(answer)
except KeyboardInterrupt:
pass
finally:
sock.close()
server.close()

程序运行得很好,一切都很完美,直到我决定结束它。

我使用Ctrl-C(或^C)结束我的程序。 KeyboardInterrupt 异常得到了正确处理并且到达了 finally block ,但是由于某种原因,当我再次运行该程序时,我得到了一个关于正在使用的端口的 OSError,在重新运行代码之前,我必须等待大约 1 分钟,直到套接字关闭。如果重要的话,我在 Linux 上。

我在这里错过了什么?为什么套接字没有正确关闭?

编辑:这不是 How to close a socket left open by a killed program? 的副本因为在我的情况下,套接字已正常关闭,而不是那个问题。

最佳答案

这是因为套接字处于 TCP TIME-WAIT 状态,这是端点在发送最后一个 ack 之后所处的状态,但在此期间,如果 ack 丢失,另一端可能会重新传输其最后一个要求。 (正如 tfb 所说)。

为了解决这个问题,需要在套接字出价之前插入此代码:

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

关于Python 套接字并没有真正关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41208720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com