我最近一直在学习python,我刚开始使用python的socket库来玩网络.直到最近,当我的脚本在没有关闭连接的情况下终止时,一切都进展顺利.我下次运行脚本时,得到了:
File "./alert_server.py", line 9, in <module>
s.bind((HOST, PORT))
File "<string>", line 1, in bind
socket.error: (98, 'Address already in use')
Run Code Online (Sandbox Code Playgroud)
所以看起来有些东西仍然绑定到端口,即使python脚本没有运行(我已经验证了这个$px aux.很奇怪的是,大约一分钟之后,我可以在同一个端口上再次运行脚本没关系.有什么方法可以防止/取消绑定端口,以防将来发生这种情况吗?
Gre*_*ill 14
你想做的就是在之前bind做,做:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Run Code Online (Sandbox Code Playgroud)
您看到自己的行为的原因是操作系统在最后一次连接终止后的一段时间内保留该特定端口.这样可以正确地丢弃在应用程序终止后可能进入的任何杂散的进一步数据包.
通过设置SO_REUSEADDR套接字选项,您告诉操作系统您知道自己在做什么,并且仍然希望绑定到同一端口.