imaplib SSL连接在关闭后处于CLOSE_WAIT状态
我有一段Python代码,它通过IMAP4_SSL连接到IMAP服务器,一切运行得很好,直到它尝试用以下代码关闭连接:
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检查,所以这些连接会随着时间的推移而积累。你们觉得这可能是为什么呢?我哪里做错了?
1 个回答
1
当本地程序没有关闭套接字时,它会处于CLOSE_WAIT状态。
查看imaplib的源代码,发现唯一调用self.sock.close()
的地方是在shutdown()
函数里。
我猜你需要调用self.connection.shutdown()
。
更新:正如Bruno所提到的,logout()
会调用shutdown()
。不过,示例代码的结构是,如果close()
出现异常,那么logout()
就会被悄悄跳过……这样一来,shutdown()
就不会被调用。我在想这是不是发生的情况。