From 319a972e751cec1ac95092fb138b9840bb1ac696 Mon Sep 17 00:00:00 2001 From: likewise Date: Wed, 14 Dec 2005 21:58:14 +0000 Subject: [PATCH] Duplicate FIN ACK race condition fix by Kelvin Lawson. --- src/core/tcp_in.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core/tcp_in.c b/src/core/tcp_in.c index ba4ebf3e..7715d9e5 100644 --- a/src/core/tcp_in.c +++ b/src/core/tcp_in.c @@ -938,7 +938,12 @@ tcp_receive(struct tcp_pcb *pcb) tcplen = TCP_TCPLEN(&inseg); - pcb->rcv_nxt += tcplen; + /* First received FIN will be ACKed +1, on any successive (duplicate) + * FINs we are already in CLOSE_WAIT and have already done +1. + */ + if (pcb->state != CLOSE_WAIT) { + pcb->rcv_nxt += tcplen; + } /* Update the receiver's (our) window. */ if (pcb->rcv_wnd < tcplen) {