python - 如何强制退出 Python 中的 CLOSE_WAIT 套接字?

标签 python c sockets tcp

我在我的 Python 脚本中使用了一堆 sockets,大概是 20/s。这些是短暂的,在三秒钟内完成。我已尝试将 socket.close() 发送到所有内容,但由于某些原因 sockets 上的 CLOSE_WAIT 状态仍然保持堆积。

如何强制退出这些 CLOSE_WAIT sockets?或者我可以为它们设置一个较低的 timeout 吗?它们最终堆积到崩溃的地步。

这是我的套接字代码:

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        s.settimeout(2) # 2 seconds timeout

        l_onoff = 1
        l_linger = 0
        s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', l_onoff, l_linger)) 

        self.s = s          
        streamloop.add_callback(self.connect, s)

这是我的结束:

def full_close(self):
    try:
        self.stream.close()
        self.s.close()
    except Exception:
        print 'full_close err: ', sys.exc_info()[1:3]
        pass    

最佳答案

听起来你在某处泄漏 socket 。

参见 https://stackoverflow.com/a/11240739/412080了解更多。

关于python - 如何强制退出 Python 中的 CLOSE_WAIT 套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15659758/

相关文章:

python - 如果 Flask View 中出现错误,如何使 Redis 缓存对象失效或删除

python - 如何在 lambda 中指定参数类型?

c - 正确释放结构

c++ - 什么是多级指针?

编译 "stress-ng"包的静态链接可执行文件

java - 从 InputStream 读取到 byte[] 会抛出 IndexOutOfBoundsException

linux - 在读取所有数据之前写入 TCP 套接字的行为

python - 为什么对象不需要 global 关键字

python - 使用 hdf5 的矩阵乘法

sockets - tcp read() 在 accept() 之后立即