Fixed bug #27329: dupacks by unidirectional data transmit

This commit is contained in:
goldsimon 2009-10-15 20:09:13 +00:00
parent a9740c6a44
commit d9a5094068
2 changed files with 36 additions and 29 deletions

View File

@ -43,6 +43,9 @@ HISTORY
++ Bugfixes:
2009-10-15: Simon Goldschmidt (Oleg Tyshev)
* tcp_in.c: Fixed bug #27329: dupacks by unidirectional data transmit
2009-10-15: Simon Goldschmidt
* api_msg.c: Fixed bug #27709: conn->err race condition on netconn_recv()
timeout

View File

@ -766,8 +766,9 @@ tcp_receive(struct tcp_pcb *pcb)
pcb->acked = 0;
if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge){
if (pcb->unacked != NULL) {
++pcb->dupacks;
if (pcb->dupacks >= 3 && pcb->unacked != NULL) {
if (pcb->dupacks >= 3) {
if (!(pcb->flags & TF_INFR)) {
/* This is fast retransmit. Retransmit the first unacked segment. */
LWIP_DEBUGF(TCP_FR_DEBUG, ("tcp_receive: dupacks %"U16_F" (%"U32_F"), fast retransmit %"U32_F"\n",
@ -800,6 +801,9 @@ tcp_receive(struct tcp_pcb *pcb)
}
}
}
} else {
pcb->dupacks = 0;
}
} else {
LWIP_DEBUGF(TCP_FR_DEBUG, ("tcp_receive: dupack averted %"U32_F" %"U32_F"\n",
pcb->snd_wl2 + pcb->snd_wnd, right_wnd_edge));