📅  最后修改于: 2023-12-03 15:05:09.171000             🧑  作者: Mango
题目:处理 OSError: [Errno 98] Address already in use 错误
当您尝试绑定一个套接字到一个已被占用的地址时,将会抛出 OSError: [Errno 98] Address already in use 错误。 这通常发生在您尝试重新启动服务器时或者运行多个实例时。
以下是一些处理此问题的方法:
查找进程并杀死它:您可以使用命令sudo lsof -i :port_number
查找正在连接的套接字所属的进程,然后杀死该进程以释放端口。 可以使用以下命令杀死进程:
sudo kill -9 $(sudo lsof -t -i :port_number)
等待一段时间后再尝试绑定套接字:在套接字关闭后,可能需要一定时间才能完全释放端口。 等待一段时间(通常是数秒钟)然后再次尝试绑定套接字。
更改端口号:在某些情况下,您可以使用其他可用端口号来绑定套接字,以避免程序因端口已被占用而崩溃。
设置SO_REUSEADDR选项:使用 setsockopt()
函数将 SO_REUSEADDR
选项设置为套接字,以避免该端口号在套接字关闭之前保留。
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((host, port))
值得注意的是,此选项存在潜在的安全漏洞,并且可能会影响到程序的正确性。