<p>我有一个Python应用程序,它打开一个简单的TCP套接字,以便在单独的主机上与另一个Python应用程序通信。有时程序会出错,或者我会直接终止它,在这两种情况下,套接字可能会保持打开一段未知的时间。</p>
<p>下一次运行程序时,出现以下错误:</p>
<pre><code>socket.error: [Errno 98] Address already in use
</code></pre>
<p>现在程序总是试图使用同一个端口,所以看起来好像它仍然是打开的。我检查了一下,确定程序没有在后台运行,但我的地址还在使用中。</p>
<p>那么,如何手动(或以其他方式)关闭一个套接字/地址,以便我的程序可以立即重新使用它?</p>
<p><strong>更新</strong></p>
<p>根据迈克的回答,我查看了<code>socket(7)</code>页面,并查看了sou REUSEADDR:</p>
<blockquote>
<pre><code>SO_REUSEADDR
Indicates that the rules used in validating addresses supplied in a bind(2) call should
allow reuse of local addresses. For AF_INET sockets this means that a socket may bind,
except when there is an active listening socket bound to the address. When the listen‐
ing socket is bound to INADDR_ANY with a specific port then it is not possible to bind
to this port for any local address. Argument is an integer boolean flag.
</code></pre>
</blockquote>