python - 绑定(bind)自由套接字后是否必须使用 "unbind"套接字?

标签 python sockets

我是否必须显式释放/解除绑定(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/

相关文章:

python - 更新/追加 Pandas 数据框

python-3.x - Python套接字服务器: can't compare input from client

sockets - Web套接字: Is it bad to always use SSL when making an online game?

c# - 如何实现 TcpClient、IPEndPoint、IPAddress 对象的实例化,当作为字符串传递时,为这两种情况实例化 IPv4 和 IPv6 地址

python - 使用 Flask 提供 ical feed

python - biopython 没有名为 Bio 的模块

java - Android:BluetoothSocket 连接抛出 IOException

.net - 如何将 SimplSockets 与 "hello world"项目的委托(delegate)一起使用?

python - 在导入模块之前模拟

python - Linux cat 命令在 python 中无法正常工作