我在我的Python腳本中使用了一堆sockets
,可能是20/s。這是短暫的,在三秒鐘內完成。我試着把socket.close()
發送給所有人,但由於某種原因,狀態sockets
仍然堆積如山。如何在Python中強制退出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 2013-03-27 13:54:16
除非重新設置默認設置,否則延續的代碼不會執行任何操作。不要那樣做,這只是稍後邀請某人去搗鼓它。 – EJP 2013-03-27 23:04:40