在我的Python套接字程序中,我有时需要用Ctrl-C来中断它。当我这样做时,它会使用socket.close()
关闭连接。Python [Errno 98]地址已经在使用
但是,当我尝试重新打开它时,我必须等待看起来像是一分钟之后才能再次连接。如何正确关闭套接字?或者这是打算?
在我的Python套接字程序中,我有时需要用Ctrl-C来中断它。当我这样做时,它会使用socket.close()
关闭连接。Python [Errno 98]地址已经在使用
但是,当我尝试重新打开它时,我必须等待看起来像是一分钟之后才能再次连接。如何正确关闭套接字?或者这是打算?
是的,它的目的是。在这里您可以阅读detailed explanation。可以通过在套接字上设置SO_REUSEADDR选项来覆盖此行为。例如:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
如果你的SocketServer模块中使用TCPSERVER,UDPServer或它们的子类,你可以把这个类变量(instanciating服务器之前):
SocketServer.TCPServer.allow_reuse_address = True
(通过SocketServer.ThreadingTCPServer - Cannot bind to address after program restart)
这导致INIT(构造器),用于:
if self.allow_reuse_address:
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
没有什么工作对我来说,除了运行此命令的子进程,HttpServer的调用之前(( '',443),将myHandler):
杀-9 $(lsof的-ti TCP:443)
当然这只是针对类似Linux的操作系统!
奇怪。我在绑定之前调用了它,并且错误仍在发生。我必须在其他地方犯错。 – byxor 2017-02-08 10:25:02
没关系,当我的自动化测试重复绑定并关闭单独的线程时,我遇到了一个奇怪的竞争条件。 – byxor 2017-02-08 14:16:12