J,
is there a solution to prevent this block? or, as Bill said, lwip doesn't do
any test, and gives this problem if my application will call a lot of time
tcp_write with small pieces?
thanks.
2008/3/18, Jonathan Larmour <[EMAIL PROTECTED]>:
>
> Piero 74 wrote:
> > Hi.
> >
> > i'm using socket on lwip 130rc1.
> >
> > i have this problem:
> >
> > after some send operation, in tcp_enqueue, here:
> >
> > /* If total number of pbufs on the unsent/unacked queues exceeds the
> > * configured maximum, return an error */
> > queuelen = pcb->snd_queuelen;
> > /* check for configured max queuelen and possible overflow */
> > if ((queuelen >= TCP_SND_QUEUELEN) || (queuelen >
> > TCP_SNDQUEUELEN_OVERFLOW)) {
> > LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, ("tcp_enqueue: too long queue
> > %"U16_F" (max %"U16_F")\n", queuelen, TCP_SND_QUEUELEN));
> > TCP_STATS_INC(tcp.memerr);
> > pcb->flags |= TF_NAGLEMEMERR;
> > return ERR_MEM;
> > }
> >
> > my code loop forever, in this piece of code, with queuelen =
> > TCP_SND_QUEUELEN, without send any packet, incremeting err in tcp.memerr
>
>
> Since I assume your thread is blocked in the send, lwip is trying by
> itself
> to resend the data. You can see how it does this in api_msg.c. The
> sent_tcp
> function is called when TCP data is really sent. More will be sent if it
> needs to be from sent_tcp by calling do_writemore (or indeed, that's how
> it
> will know that all data in the write has finished). The send buffers are
> also periodically topped up if they need to be by using the poll_tcp
> callback, which also calls do_writemore. This is called from the tcp slow
> timer every 500ms.
>
> This will be why you are seeing that code called lots of times. Sometimes
> it won't get ERR_MEM, or at least it shouldn't. Unless the connection has
> really stalled because the remote end has stopped acking packets.
>
> Jifl
> --
> eCosCentric Limited http://www.eCosCentric.com/ The eCos experts
> ** Visit us at ESC Silicon Valley <http://www.embedded.com/esc/sv> **
> ** April 15-17 2008, Booth 3012, San Jose McEnery Convention Center **
> Barnwell House, Barnwell Drive, Cambridge, UK. Tel: +44 1223 245571
> Registered in England and Wales: Reg No 4422071.
> ------["Si fractum non sit, noli id reficere"]------ Opinions==mine
>
>
> _______________________________________________
> lwip-users mailing list
> [email protected]
> http://lists.nongnu.org/mailman/listinfo/lwip-users
>
_______________________________________________
lwip-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users