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

Jef*_*rth 14 python sockets

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

socket.error: [Errno 48] Address already in use
Run Code Online (Sandbox Code Playgroud)

更改端口可以解决问题.

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

eph*_*ent 23

使用.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)您的收听插座.

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