3

我在我的 Python 脚本中使用了一堆sockets,可能是 20/s。这些是短暂的,在三秒钟内完成。我已经尽力做好发送socket.close()到所有东西的工作,但由于某种原因,CLOSE_WAIT状态sockets仍然不断堆积。

我怎样才能强制退出这些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    
4

1 回答 1

1

听起来您在某处泄漏了套接字。

有关更多信息,请参阅https://stackoverflow.com/a/11240739/412080

于 2013-03-27T14:13:47.587 回答