On Saturday 06 July 2002 00.38, Henrik Nordstrom wrote: > To deal with 2, may I propose that the following symmetric FIN > state machine is used instead of the odd assymetric one used today: > > > ESTABLISHED / FIN -> FIN_WAIT > > FIN_WAIT / ACK(R) -> CLOSE_WAIT > > CLOSE_WAIT / FIN(R) -> TIME_WAIT (or a new FIN_WAIT2 state) > > TIME_WAIT / ACK -> TIME_WAIT
On a second reflection it gets a little bit more complex than this. Need to keep track of which side has closed down, causing a small explosion in states... FIN_WAIT_ORIGINAL FIN_WAIT_REPLY CLOSE_WAIT_ORIGINAL CLOSE_WAIT_REPLY FIN_WAIT2_ORIGINAL FIN_WAIT2_REPLY TIME_WAIT State descriptions: FIN_WAIT -> Wait for ACK to FIN CLOSE_WAIT -> Wait for FIN in other direction ESTABLISHED / FIN -> FIN_WAIT_ORIGINAL FIN_WAIT_ORIGINAL / ACK(R) -> CLOSE_WAIT_ORIGINAL FIN_WAIT_ORIGINAL / FIN(R) -> FIN_WAIT2_ORIGINAL CLOSE_WAIT_ORIGINAL / FIN(R) -> FIN_WAIT2_ORIGINAL FIN_WAIT2_ORIGINAL / ACK -> TIME_WAIT And identical in the other direction, s/ORIGINAL/REPLY/ Can be simplified by using TIME_WAIT for FIN_WAIT2_* if one likes, but isn't really fair if tuning is to be allowed for FIN_WAIT.. Regards Henrik