我正在尝试使用套接字启动并运行一个简单的服务器,它将向任何连接的客户端发送相同的信息。我已成功设法处理线程并在KeyboardInterrupt
的情况下停止它们,但如果脚本提前结束(例如python进程关闭或强制运行),我无法弄清楚如何关闭套接字再次写剧本。)
一个非常基本的例子是:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket_process.bind(('localhost', 60000))
socket_process.listen(5)
conn, addr = socket_process.accept()
如果你运行它(至少在Windows上),然后点击F5再次运行它,你得到error: [Errno 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted.
。它最终会在半分钟之后关闭,但如果产生它的脚本不再存在,我希望它立即关闭。
即使设置了超时,也不会导致错误随时消失。
对于记录,atexit
不会捕获这些类型的退出。我认为类似于多处理守护进程选项的东西如果存在就可以工作。