2011-03-10 4 views
2

내가 IMAP4_SSL를 통해 IMAP 서버에 연결하는 파이썬 코드를 닫은 후 CLOSE_WAIT에 걸어, 그리고이와의 연결을 종료하려고 할 때까지 모든 작동합니다 : 이것은에서 연결을 잎은 imaplib의 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 

오랜 시간 동안 남아 있습니다. 파이썬 프로세스 자체는 주기적으로 IMAP 검사를하는 장기 실행 데몬이므로 시간이 지나면 누적됩니다. 왜 그런 일이 벌어지고 내가 뭘 잘못하고 있는거야?

+0

나머지 코드를 보는 것이 유용 할 수 있습니다. – Acorn

+0

실제로 동일한 문제가 있습니다. 해결할 수 있었거나 해결 방법을 찾을 수 있었습니까? – NFicano

+0

@NFicano 불행히도, 아직 ... – StasM

답변

1

소켓은 로컬 프로그램에 의해 닫혀 있지 않을 때 CLOSE_WAIT에서 행 아웃합니다.

imaplib source을 보면 self.sock.close()이라는 유일한 장소는 shutdown()입니다.

내 생각 엔 self.connection.shutdown()으로 전화해야합니다.

업데이트 : 브루노 노트와 마찬가지로 logout()shutdown()입니다. 그러나 예제 코드의 구조는 close()이 예외를 발생 시키면 logout()은 자동으로 건너 뜁니다 ... 그리고 shutdown()은 호출되지 않습니다. 그게 무슨 일이 일어날 지 궁금해.

+0

흠 ... 닫기() 실제로, 글쎄, 모든 것을 닫습니다,하지만 내가 잘못 본 것 같습니다. 또한 소멸자가해야한다고 생각했지만, 그렇게되지는 않습니다. 고마워, 나는 셧다운을 시도 할 것이다. – StasM

+1

'logout'은'shutdown'을 호출합니다. – Bruno

+0

@ 브루노, 네가 맞아. 음 ... – kkurian