Python 地址已经在使用中

在我的Python套接字程序中,我有时需要用Ctrl-C来中断它。 当我这样做时,它会使用socket.close()closures连接。

但是,当我尝试重新打开它时,我必须等待一下,然后才能再次连接。 如何正确closures套接字? 或者这是打算?

是的,这是有意的。 在这里你可以阅读详细的解释 。 可以通过在套接字上设置SO_REUSEADDR选项来覆盖此行为。 例如:

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

如果您在SocketServer模块中使用TCPServer,UDPServer或其子类,则可以设置此类variables(在实例化服务器之前):

 SocketServer.TCPServer.allow_reuse_address = True 

(通过SocketServer.ThreadingTCPServer – 程序重启后无法绑定到地址 )

这会导致init (构造函数):

  if self.allow_reuse_address: self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 

– > ps -fA | grep python

501 81211 12368 0 10:11 PM ttys000 0:03.12
python -m SimpleHTTPServer

– >杀81211

除了在调用HTTPServer(('',443),myHandler)之前使用此命令运行subprocess外,没有任何东西可以工作:

kill -9 $(lsof -ti tcp:443)

当然,这只适用于类似于Linux的操作系统!