套接字关闭并重新绑定 - 如何避免长时间等待?

Enr*_*sso 4 python sockets linux python-3.x

我正在 python 中使用套接字,并且在开发阶段我需要经常终止并重新启动我的程序。

问题是,一旦杀死了我的 python 脚本,我必须等待很长时间才能重新绑定侦听套接字。这是重现该问题的片段:

#!/usr/bin/env python3                                                          

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 4321))
try:
    s.listen(5)
    while True:
        (a, b) = s.accept()
        print(a.recv(1000))
except KeyboardInterrupt:
    print("Closing")
    s.shutdown(socket.SHUT_RDWR)
    s.close()
Run Code Online (Sandbox Code Playgroud)

点击 Cz 运行例外代码、调用shutdownclose函数,但我无法重新启动我的程序,直到套接字超时(GNU/Linux 环境)。

我怎样才能避免这种情况?

Ric*_*ton 5

我不知道如何在 Python 中执行此操作,但您想设置 SO_REUSEADDR 套接字选项。

  • s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((socket.gethostname(), 4321)) 有效。哥们,谢啦! (2认同)