【发布时间】:2013-03-17 14:06:14
【问题描述】:
我在我的 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
【问题讨论】:
-
有没有办法遍历所有
open或close_wait套接字然后杀死它们?像手动垃圾收集一样? -
该逗留代码除了重新设置默认设置外什么都不做。不要那样做,这只是邀请以后有人摆弄它。
-
嘿@knutole 你找到答案/解决方案了吗?
-
@Kazuki 对不起,已经 7 年了,我不记得了。