tcp_in: Fix incomplete closure if linger active

2.1.3-esp: 8b599aa1 tcp_in: Fix incomplete closure if linger active
This commit is contained in:
David Cermak
2022-09-04 09:58:32 +02:00
parent 731f5248c3
commit 88136ab186
+14
View File
@@ -68,6 +68,17 @@
/** Initial CWND calculation as defined RFC 2581 */
#define LWIP_TCP_CALC_INITIAL_CWND(mss) ((tcpwnd_size_t)LWIP_MIN((4U * (mss)), LWIP_MAX((2U * (mss)), 4380U)))
/** Complete potentially lingering closure of a PCB */
#if LWIP_SO_LINGER
#define TCP_POLL_LINGERING_CLOSE(pcb) do { \
err_t err_priv; \
LWIP_UNUSED_ARG(err_priv); \
TCP_EVENT_POLL(pcb, err_priv); \
} while(0)
#else
#define TCP_POLL_LINGERING_CLOSE(pcb)
#endif /* LWIP_SO_LINGER */
/* These variables are global to all functions involved in the input
processing of TCP segments. They are set by the tcp_input()
function. */
@@ -1012,6 +1023,7 @@ tcp_process(struct tcp_pcb *pcb)
TCP_RMV_ACTIVE(pcb);
pcb->state = TIME_WAIT;
TCP_REG(&tcp_tw_pcbs, pcb);
TCP_POLL_LINGERING_CLOSE(pcb);
} else {
tcp_ack_now(pcb);
pcb->state = CLOSING;
@@ -1030,6 +1042,7 @@ tcp_process(struct tcp_pcb *pcb)
TCP_RMV_ACTIVE(pcb);
pcb->state = TIME_WAIT;
TCP_REG(&tcp_tw_pcbs, pcb);
TCP_POLL_LINGERING_CLOSE(pcb);
}
break;
case CLOSING:
@@ -1040,6 +1053,7 @@ tcp_process(struct tcp_pcb *pcb)
TCP_RMV_ACTIVE(pcb);
pcb->state = TIME_WAIT;
TCP_REG(&tcp_tw_pcbs, pcb);
TCP_POLL_LINGERING_CLOSE(pcb);
}
break;
case LAST_ACK: