【问题标题】:Socket shutdown and rebind - How to avoid long wait?套接字关闭和重新绑定 - 如何避免长时间等待?
【发布时间】:2011-01-22 00:41:19
【问题描述】:

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

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

#!/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 会运行 except 代码,调用 shutdown 和 close 函数,但在套接字超时(GNU/Linux 环境)之前我无法重新启动程序。

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

【问题讨论】:

    标签: python linux sockets python-3.x


    【解决方案1】:

    我不确定如何在 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))这样可行。谢谢大佬!
    猜你喜欢
    • 2019-06-09
    • 2021-05-03
    • 1970-01-01
    • 2015-03-07
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多