Python [Errno 98]地址已在使用中


91

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

但是,当我尝试重新打开它时,我必须等待一分钟左右才能重新连接。如何正确关闭插座?还是打算这样做?

Answers:


114

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

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

奇怪。我在绑定之前就已经调用了此方法,并且该错误仍在发生。我肯定在其他地方犯了错误。
byxor

没关系,当我重复绑定并关闭单独的线程以进行自动化测试时,我处于一种奇怪的竞争状态。
byxor

您需要导入称为套接字的模块。
巴托斯

30
$ ps -fA | grep python
501 81211 12368   0  10:11PM ttys000    0:03.12  
python -m SimpleHTTPServer

$ kill 81211

1
不幸的是,它并不总是有效。当我遇到这个问题时,这是我的立即想法,但是在我的情况下,没有python进程可以杀死。
克里斯滕

20

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

SocketServer.TCPServer.allow_reuse_address = True

(通过SocketServer.ThreadingTCPServer-程序重新启动后无法绑定到地址

这导致init(构造函数)执行以下操作:

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

12

因为您试图在已经运行的同一端口中运行服务。

因为您的服务没有在进程堆栈中停止,所以它有时会发生。你必须杀死他们

无需安装任何内容,这是杀死所有正在运行的python进程的单行命令。

对于基于Linux的操作系统:

重击:

kill -9 $(ps -A | grep python | awk '{print $1}')

鱼:

kill -9 (ps -A | grep python | awk '{print $1}')

1
为我工作了谢谢!
代码

1
为我工作谢谢
user007

6

在调用之前,除了使用此命令运行子进程外,对我没有任何帮助HTTPServer(('', 443), myHandler)

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

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




0

遇到相同的错误:执行以下
步骤:
1-使用$ ps -fA | grep python
2-
终止所有进程3-关闭终端
4-重新启动应用程序(mkchromecast)。
5-没有收到此错误消息。

有另一个问题。跟进。


0

运行命令

fuser -k (port_number_you_are _trying_to_access)/TCP

烧瓶示例: fuser -k 5000/tcp

另外,请记住当您通过ctrl + z进行插入时会出现此错误。所以要终止使用ctrl + c

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.