Mark Lakata wrote:
I think I've gotten closer to the problem. It
seems that the size of the segments that are queued up to be
sent by tcp_output are larger than the 'wnd' size (which is pcb->snd_wnd
in this case), and thus they
don't get sent. I'm not sure how this could have happened.
Specifically, this while() loop never gets entered (line 969 in tcp_out.c)
in tcp_output()
(seg is
non NULL)
while (seg != NULL &&
ntohl(seg->tcphdr->seqno) -
pcb->lastack + seg->len <= wnd) {
because seg->len is bigger than wnd.
Which version of lwIP are you using? (i.e. what does '?' stand for?)
I'm asking because from 1.4.0 to 1.4.1, there have been 2 or 3 bugs
fixed in this area, which should ensure that all segments we create
fit into the window (unless the remote side does not send window
updates according to the TCP spec).
If 1.4.1 does not fix this, what is your MSS size, what are the
connection's TX/RX window sizes and what OS or IP stack is your peer
running?
Simon
|