套接字程序崩溃后无法绑定到地址

时间:2010-02-16 02:47:04

标签: python sockets

如果我的程序在套接字关闭之前崩溃,那么当我下次运行时,我会收到一个看起来像这样的错误;

socket.error: [Errno 48] Address already in use

更改端口可解决问题。

有没有办法避免这种情况,为什么会发生这种情况(当程序退出时,套接字是否应该被垃圾收集并关闭)?

3 个答案:

答案 0 :(得分:23)

在侦听套接字上使用.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)

搜索这些条款将为您提供许多解释,说明为什么这是必要的。基本上,在第一个程序关闭后,操作系统会将先前的侦听套接字保持在关闭状态TIME_WAIT时间。 SO_REUSEADDR表示您想要使用相同的侦听端口。

答案 1 :(得分:3)

当程序未正确关闭套接字时,大多数操作系统需要 2 分钟来关闭套接字。我已经用SEGFAULT(我没有处理)或类似的C程序多次击中这个
编辑:
感谢ephemient指出定义此超时的RFC 793 (TCP)

答案 2 :(得分:2)

其他收到此错误的人可能会收到此错误,因为该端口正由另一个进程使用。因此,检查端口是否被任何其他进程使用,并在另一个端口运行程序或终止阻塞进程。