SSL-соединения imaplib зависают в CLOSE_WAIT после закрытия - PullRequest
2 голосов
/ 10 марта 2011

У меня есть код Python, который подключается к серверу IMAP через IMAP4_SSL, и все работает нормально, пока не попытается закрыть соединение следующим образом:

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 голос
/ 01 марта 2012

Сокеты висят в CLOSE_WAIT, когда они не были закрыты локальной программой.

Если посмотреть на imaplib source , единственное место, где вызывается self.sock.close(), находится в shutdown().

Полагаю, вам нужно позвонить self.connection.shutdown().

update: Как отмечает Бруно, logout() вызывает shutdown().Однако, как пример кода структурирован, если close() вызывает исключение, то logout() будет молча пропущено ... и shutdown() не будет вызываться.Интересно, так ли это?

...