症状
服务器绑定套接字时以 OSError: [Errno 98] Address already in use 启动失败。它可能此前多次重启;停止后立刻重启会失败,等待几秒则成功。这是存活进程或 TIME_WAIT 套接字仍占着本地端口的典型特征。
诊断
用 ss -ltnp 找出监听该端口的进程;用 ss -tan 查看 TIME_WAIT 套接字;检查代码是否设置了 SO_REUSEADDR 或框架等价选项。
ss -ltnp | grep :8000
根因
本地地址仍被存活进程或处于 TIME_WAIT 的套接字占用,绑定调用无法取得它。代码通常没问题,端口状态才是根源。
修复
停止占用端口的进程,或启用 SO_REUSEADDR 并保证每个端口只有一个绑定者。避免重复启动实例,必要时给 TIME_WAIT 套接字一点时间清空。
验证
再次绑定确认服务器启动,并确认端口上只有一个监听进程。单一监听者且启动成功即证明修复。
常见陷阱
在多进程服务器里让每个 worker 绑定同一端口会冲突;应让主进程绑定或按进程分配端口。