2

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チェックを定期的に実行する長時間実行されるデーモンであるため、これらは時間とともに蓄積されます。なぜそれが起こっているのか、そして私が間違っていることについて何か考えはありますか?

4

1 に答える 1

1

ソケットは、ローカル プログラムによって閉じられていない場合、CLOSE_WAIT でハングアウトします。

imaplib のソースを見ると、呼び出されている場所self.sock.close()は inだけshutdown()です。

に電話する必要があると思いますself.connection.shutdown()

更新:ブルーノが指摘するようにlogout()shutdown(). ただし、サンプル コードの構造上、例外が発生した場合close()logout()黙ってスキップshutdown()され、呼び出されません。そういうことなのかしら。

于 2012-03-01T06:39:51.337 に答える