套接字关闭和重新绑定 - 如何避免长时间等待?
我正在用Python做socket编程,因为还在开发阶段,我需要频繁地停止和重启我的程序。
问题是,一旦我结束了Python脚本,我必须等很长时间才能重新绑定监听的socket。下面是一个可以重现这个问题的代码片段:
#!/usr/bin/env python3
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 4321))
try:
s.listen(5)
while True:
(a, b) = s.accept()
print(a.recv(1000))
except KeyboardInterrupt:
print("Closing")
s.shutdown(socket.SHUT_RDWR)
s.close()
按下C-z会运行异常处理代码,调用shutdown
和close
函数,但在socket超时之前,我无法重启我的程序(这是在GNU/Linux环境下)。
我该如何避免这个问题呢?
1 个回答
5
我不太确定在Python中怎么做,但你需要设置一个叫SO_REUSEADDR的套接字选项。