lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [lwip-users] lwIP malloc fail


From: Kieran Mansley
Subject: Re: [lwip-users] lwIP malloc fail
Date: Wed, 7 Apr 2010 16:58:07 +0100

On 6 Apr 2010, at 16:38, Navcon - Pedro Paulo Santos wrote:

> Hi all!
>  
> I'm having a problem in trying to make a system with lwIP that sends a large 
> file with TCP from an external serial Flash memory.
>  
> I use the following logic: read certain amont of data from the external 
> memory, send over TCP with tcp_write (), read more data, send again, and 
> there goes on. I made a function to handle lack of memory because of Nagle's 
> algoritm (because I have little memory and can't prepare a large TCP 
> message), and use tcp_output () to force the send of the amont of data. The 
> problem is that after some transfers (no more than 15 tcp transfers) the 
> program doesn't find memory to alloc in the following lines of tcp_enqueue () 
> function:

TCP won't free the segments until it has finished with them, which means 
waiting for an ACK from the other end.  This could take some time.  

You should be able to disable Nagle's algorithm, and so avoid having to work 
around it, by setting the NODELAY flag on the PCB.

If you can address the memory in your flash directly then the most efficient 
way to deal with this would be to use a  PBUF_ROM type pbuf, which will just 
reference the flash directly and avoiding having to copy the data into a 
separate buffer.

If that's not an option then you will need to do as you are and wait for 
buffers to be freed when ACKs arrive.  To get ACKs more quickly I would suggest 
using a small TCP_MSS value.  If you don't have much memory you're never going 
to get high performance, so the tradeoff in this case is probably worth it.

Kieran



reply via email to

[Prev in Thread] Current Thread [Next in Thread]