MBOX-Line: From mrc at CAC.Washington.EDU  Fri Jun 30 09:36:34 2006
To: imap-protocol@u.washington.edu
From: Mark Crispin <mrc@CAC.Washington.EDU>
Date: Fri Jun  8 12:34:37 2018
Subject: [Imap-protocol] IMAP disconnection
In-Reply-To: <etPan.44a548f0.6bad5e90.d87@utopia>
References: <etPan.44a548f0.6bad5e90.d87@utopia>
Message-ID: <Pine.OSX.4.64.0606300923160.408@pangtzu.panda.com>

On Fri, 30 Jun 2006, DINH Vi?t Ho? wrote:
> Is something will be breaking if we don't send the LOGOUT command ?

It's not a good idea.

(1) Some servers may perform a cleanup or checkpoint operation during 
LOGOUT.  Of course, the server will try to trap disconnect, and do the 
checkpoint anyway in the trap handler.  However, a few (thankfully, rare) 
OS environments send mandatory (non-trappable) kills to servers on 
disconnect.  Thus, the disconnect can actually cause a loss of cleanups or 
mailbox updates!

This is a real problem in some mailbox formats (e.g., traditional UNIX 
mailbox format).  It is very expensive to update the mailbox file, so flag 
changes are deferred until a checkpoint.

(2) The server is going to log the disconnect as a non-LOGOUT session 
termination event.  It has no way of knowing that the client intended to 
do this.  This, in turn, leads to false bug reports.

> Is there a recommended behavior to adopt to avoid that problem ?

Yes.  There is no reason why your client must block waiting for the server 
to LOGOUT.  All it has to do is send the LOGOUT command and defer closing 
the TCP connection until the BYE and OK response comes back.  In the 
meantime, it can do something else.

In a multithreaded environment, the LOGOUT could be given to a thread. 
Alternatively, the client can fork off another instance of itself 
(invisible to the user), let the fork have the sockets and go off on its 
own, and the parent fork which has the user interface forgets the sockets.

This way, the user sees an immediate termination, whereas behind the 
curtain the funny man is busy pulling the levers and twirling the dials.

-- Mark --

http://panda.com/mrc
Democracy is two wolves and a sheep deciding what to eat for lunch.
Liberty is a well-armed sheep contesting the vote.

