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