我有一个 Python 应用程序,它打开一个简单的 TCP 套接字来与单独主机上的另一个 Python 应用程序进行通信。有时程序要么出错,要么我直接杀死它,在任何一种情况下,套接字都可能会保持打开状态一段未知的时间。
下次我去运行该程序时,我收到此错误:
socket.error: [Errno 98] Address already in use
现在,程序总是尝试使用相同的端口,因此看起来好像它仍然是打开的。我检查了一下,非常确定该程序没有在后台运行,但我的地址仍在使用中。
那么,我如何手动(或以其他方式)关闭套接字/地址,以便我的程序可以立即重新使用它?
Update
根据迈克的回答,我查看了socket(7)
页面并查看了 SO_REUSEADDR:
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.
假设您的套接字已命名s
...你需要设置socket.SO_REUSEADDR
在绑定到接口之前在服务器的套接字上...这将允许您立即重新启动 TCP 服务器...
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((ADDR, PORT))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)