我是否必须显式释放/解除绑定(bind)一个套接字以便它可以被重用?我正在考虑使用 close()
,但我看到了一些选项,例如 tcp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
。我必须使用它还是 close()
就足够了?
有什么方法可以确保端口对新绑定(bind)是免费的吗?
TorPorts = {}
def port_setup(workers):
for worker in range(workers):
for i in range(2):
tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp.bind(('', 0))
port = tcp.getsockname()[1]
print("{0} port {1}, tcp {2}".format(i,port,tcp))
if not TorPorts.has_key(worker):
TorPorts[worker] = {0:{},1:{}}
TorPorts[worker][i] = {"port":port,"tcp":tcp}
# do some programing
# close ports I s this enough?
for thread,ports in TorPorts[0].items():
tcp_port = ports["tcp"]
tcp_port.close()
最佳答案
最好使用tcp_port.close()
并且socket.SO_REUSEADDR
在某些情况下可能会失败。如果发生这种情况,您无法重新绑定(bind)到同一端口,直到 WAIT_TIME
完成。
关于python - 绑定(bind)自由套接字后是否必须使用 "unbind"套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48303173/