Python端口绑定

时间:2009-03-03 22:46:08

标签: python

我最近一直在学习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')

所以似乎有些东西仍然绑定到端口,即使python脚本没有运行(我已经使用$px aux验证了这一点。奇怪的是,大约一分钟之后,我可以在同一个端口再次运行脚本,它会没问题。有什么办法可以防止/取消绑定端口,以便将来发生这种情况吗?

1 个答案:

答案 0 :(得分:14)

您要做的就是在bind之前,执行:

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

您看到自己的行为的原因是操作系统在最后一次连接终止后的一段时间内保留该特定端口。这样可以正确地丢弃在应用程序终止后可能进入的任何杂散的进一步数据包。

通过设置SO_REUSEADDR套接字选项,您告诉操作系统您知道自己在做什么,并且仍然希望绑定到同一个端口。