【问题标题】:imaplib SSL connections hang in CLOSE_WAIT after closingimaplib SSL 连接在关闭后挂在 CLOSE_WAIT
【发布时间】:2011-07-12 09:49:54
【问题描述】:

我有一个通过 IMAP4_SSL 连接到 IMAP 服务器的 python 代码,一切正常,直到它尝试关闭连接:

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,因此这些会随着时间的推移而累积。任何想法为什么会发生以及我做错了什么?

【问题讨论】:

  • 查看其余代码可能会很有用。
  • 我实际上遇到了同样的问题 - 你能解决这个问题或至少找到解决方法吗?
  • @NFicano 不幸的是,还没有......

标签: python ssl tcp imap imaplib


【解决方案1】:

当本地程序没有关闭套接字时,它们会在 CLOSE_WAIT 中挂起。

查看imaplib source,唯一调用self.sock.close()的地方是shutdown()

我猜你需要打电话给self.connection.shutdown()

更新: 正如布鲁诺所说,logout() 调用 shutdown()。但是,示例代码的结构方式是,如果close() 引发异常,则logout() 将被静默跳过...并且shutdown() 不会被调用。我想知道这是不是发生了什么。

【讨论】:

  • 嗯...我确定 close() 实际上,嗯,关闭了一切,但看起来我错了。我也认为析构函数应该这样做,但这似乎也没有发生。谢谢,我试试关机。
  • 看起来logout 调用shutdown
  • 不确定为什么这是一个已回答的问题...答案是“呼叫关闭”,但注销 确实 呼叫关闭。那么,它为什么会挂起?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
相关资源
最近更新 更多