端口是否应该在关闭后立即可用?

Should ports be available immediately after closing?

我一直在 Python 在两个客户端和一个服务器之间编写一个简单的 TCP/IP 服务器。目前,当我尝试在同一端口关闭后立即重新运行该程序时,shell 通知我该端口正忙。

我认为这应该表明某处没有正确关闭连接,但我似乎找不到任何挥之不去的套接字。

我的问题是,这个假设是否正确?我是打开一个套接字还是这种行为正常?如果是这样,有人对我如何找到它有任何建议吗?

在服务器端,我打开了两个连接并将它们放入一个元组中,这样我就可以循环访问它们:

    (self.con1, rec1) = self.s.accept()
    (self.con2, rec2) = self.s.accept()
    self.con = (self.con1, self.con2)

以下代码是否足以关闭这些连接?

    self.con1.close()
    self.con2.close()

有没有可能将连接放入元组中会创建可能挥之不去的连接的新副本?

这是正常的。 TCP 为持续几分钟(最大段生命周期的两倍)的端口定义了 TIME_WAIT 状态,在此期间它们不能被重新使用。这是一种数据完整性措施。您可以通过在绑定套接字之前设置 SO_REUSEADDR 选项来克服它。