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

4 投票
1 回答
4423 浏览
提问于 2025-04-15 19:49

我正在用Python做socket编程,因为还在开发阶段,我需要频繁地停止和重启我的程序。

问题是,一旦我结束了Python脚本,我必须等很长时间才能重新绑定监听的socket。下面是一个可以重现这个问题的代码片段:

#!/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()

按下C-z会运行异常处理代码,调用shutdownclose函数,但在socket超时之前,我无法重启我的程序(这是在GNU/Linux环境下)。

我该如何避免这个问题呢?

1 个回答

5

我不太确定在Python中怎么做,但你需要设置一个叫SO_REUSEADDR的套接字选项。

撰写回答