error:[Errno 98] Address already in use的解决

转载于:https://blog.youkuaiyun.com/sssuperfang/article/details/80039524

1. 当你该端口被其他进程占用时,那就需要你修改为一个未使用的端口号重新运行。


2.  是运行程序没有通过<Ctrl> C正常结束而是直接关闭Terminal或者其他非正常途径退出的时候: 
    通过lsof -i:(port),查看占用该端口号的进程,一般就是刚未正常退出的进程。例如
   sudo lsof -i:9050  
3.    然后kill掉该PID的进程,重新运行。
   sudo kill 6051 

 

### 解决服务器套接字绑定失败 (Address Already In Use Error 98) 当遇到 `bind` 函数返回错误码 98 (`EADDRINUSE`) 表明地址已经在使用时,通常是因为端口被其他进程占用。为了处理这个问题,可以采取以下几种方法: #### 方法一:查找并终止占用端口的进程 可以通过命令行工具来识别哪个进程正在使用目标端口,并将其终止。 对于 Linux/Unix 系统: ```bash lsof -i :<port_number> kill -9 <PID> ``` 上述命令会列出所有监听指定端口的服务及其对应的 PID(进程 ID),之后通过 kill 命令结束该服务[^2]。 #### 方法二:设置 SO_REUSEADDR 选项 另一种常见做法是在创建 socket 后立即调用 setsockopt() 来启用 SO_REUSEADDR 选项,这允许本地地址和端口号即使在 TIME_WAIT 状态下也能被重用。 Python 示例代码如下所示: ```python import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置SO_REUSEADDR标志位 sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) try: sock.bind(('localhost', 80)) except Exception as e: print(f'Bind failed. Error: {e}') finally: sock.close() ``` 这种方法不会影响现有连接的安全性和稳定性,在大多数情况下都是安全可靠的解决方案之一[^1]。 #### 方法三:等待一段时间再尝试重新启动程序 如果不想强制关闭任何应用程序,则可以选择等待几分钟后再试一次;因为 TCP 协议规定了一个短暂的时间窗口用于确保数据包传输完成——即所谓的“TIME_WAIT”状态。这段时间过后自然就会释放掉所使用的资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值