2011-03-10 38 views
2

我有一個通過IMAP4_SSL連接到IMAP服務器的Python代碼後,直到它試圖關閉這個連接一切正常:imaplib SSL連接掛在CLOSE_WAIT關閉

def logout(self): 
    "Close the mailbox and logout and set the connection to None" 
    try: 
     self.connection.close() 
     self.connection.logout() 
    except e: 
     pass 
    self.connection = None 

這使得在連接CLOSE_WAIT狀態:

tcp  38  0 1.2.3.4:55809  5.6.7.8:993 CLOSE_WAIT 18983/python2.6 

它在哪裏停留很長時間。 python進程本身是一個長期運行的守護進程,會定期進行IMAP檢查,所以這些進程會隨着時間而積累。任何想法,爲什麼它可能會發生,我做錯了什麼?

+0

查看代碼的其餘部分可能很有用。 – Acorn 2011-03-20 01:48:13

+0

我實際上遇到同樣的問題 - 您是否能夠解決此問題或至少找到解決方法? – NFicano 2011-03-25 19:35:41

+0

@NFicano不幸的是,還沒有... – StasM 2011-03-28 19:44:36

回答

1

當它們沒有被本地程序關閉時,套接字在CLOSE_WAIT中掛起。

看着imaplib sourceself.sock.close()被稱爲唯一的地方是在shutdown()。我想你需要撥打self.connection.shutdown()

更新:由於布魯諾注意到,logout()調用shutdown()。但是,示例代碼的結構的方式,如果close()引起懷疑,那麼將默默跳過logout() ...並且不會調用shutdown()。我想知道這是怎麼回事。

+0

嗯...我確定關閉()實際上,關閉了所有東西,但看起來我錯了。我還認爲析構函數應該這樣做,但這似乎也不會發生。謝謝,我會嘗試關閉。 – StasM 2012-03-01 09:45:05

+1

看起來像'logout'調用'shutdown'。 – Bruno 2012-03-01 12:43:53

+0

@布魯諾果然,你說得對。嗯... – kkurian 2012-03-01 17:58:09