![]() Under the normal close sequence, when we receive a FIN|ACK, we enter TIME-WAIT and respond to that LAST-ACK with an ACK. Our TCP stack would send an ACK in response to *any* ACK, which included FIN|ACK but also included regular ACKs. (Or PSH|ACKs, which is what we were actually getting/sending). That was more ACKs than is necessary and results in an endless ACK storm if we were under the simultaneous close sequence. In that scenario, both sides of a connection are in TIME-WAIT. Both sides receive FIN|ACK, and both respond with an ACK. Then both sides receive *those* ACKs, and respond again. This continues until the TIME-WAIT wait period elapses and each side's TCP timers (in the Plan 9 / Akaros case) shut down. The fix for this is to only respond to a FIN|ACK when we are in TIME-WAIT. |
||
---|---|---|
.. | ||
9 | ||
ape | ||
boot | ||
cmd | ||
games | ||
lib9p | ||
libaml | ||
libauth | ||
libauthsrv | ||
libavl | ||
libbin | ||
libbio | ||
libc | ||
libcomplete | ||
libcontrol | ||
libdisk | ||
libdraw | ||
libdtracy | ||
libfis | ||
libflate | ||
libframe | ||
libgeometry | ||
libhtml | ||
libhttpd | ||
libip | ||
libjson | ||
liblex | ||
libmach | ||
libmemdraw | ||
libmemlayer | ||
libmp | ||
libndb | ||
libplumb | ||
libregexp | ||
libsat | ||
libscribble | ||
libsec | ||
libstdio | ||
libString | ||
libsunrpc | ||
libthread | ||
libttf | ||
libventi | ||
mkfile | ||
mkfile.proto |