如何修复 Python 中的“[Errno 98] 地址已在使用”

How to fix '[Errno 98] Address already in use' in Python

我正在使用 DreamHost 作为我的 server.py 的托管提供商。如果我 运行 我的代码在本地,setsockopt 函数成功地将参数 SOCKET_REUSEADDR 设置为 True 并且我可以有效复用端口。但是当我 运行 server.py 在主机上时,我收到错误消息 '[Errno 98] Address in use'

运行`ps辅助 | grep python' 并使用 kill -9 PID 手动关闭进程让我有可能在开始时重用端口。但这是否意味着 'socket.setsockopt' 不起作用?

server.py

host = 'Dreamhost_IP'
port = 33000
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))

.
.
.
.
.

if __name__=="__main__":
    server_socket.listen(5)
    print('waitin for connections')
    accept_thread = threading.Thread(target = accept_connections)
    accept_thread.start()
    accept_thread.join()
    server_socket.close()

I'm expecting to be able to reuse the desired port by overriding the wait time with SO_REUSEADDR. If I use '127.0.0.1' as 'host' and 33000 as 'port', I can successfully rerun the server on that port.

SO_REUSEADDR 不允许您同时将两个东西绑定到同一个端口。它的主要功能是绕过套接字关闭后的等待期。如果你想一次绑定两个东西,你需要使用更强大的东西:SO_REUSEPORT.