Python绑定套接字:“地址已在使用”,在关闭s之后

2024-04-20 05:53:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道已经有一个类似的问题了,但是没有一个解决方案能解决我的问题。通过ssh,我在一个远程客户端上启动一个脚本

nohup python script.py &

此脚本包含以下内容:

TCP_PORT = 5005
host = ""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.settimeout(40)
s.bind((host, TCP_PORT))
s.listen(0)
c, addr = s.accept()

...some code...

try:
    while True:
        c.send(str(1).ljust(16).encode())
except Exception as e:
    print("exiting main")
    print(e)
    c.close()
    s.close()

当我在e行中运行代码两次时,第二次我总是得到上面提到的错误。python输出的日志:

exiting main
[Errno 32] Broken pipe

Traceback (most recent call last):
  File "LogImages.py", line 204, in <module>
    main(interv)
  File "LogImages.py", line 114, in main
    s.bind((host, TCP_PORT))
OSError: [Errno 98] Address already in use

显然,这个过程调用c.close()和s.close()。那么这个地址怎么还能继续使用呢


Tags: inpy脚本hostclosebindmainport
1条回答
网友
1楼 · 发布于 2024-04-20 05:53:44

关闭套接字只会释放任何底层连接的句柄。实现仍然需要一些时间来完成连接的有序关闭,在这段时间内,地址仍在使用

例如,如果您有一个活动的连接,而另一方没有从中读取数据,那么实现将给它时间来读取发送的数据。在此期间,该地址仍在使用中

相关问题 更多 >