Hi Simon,

Once the data is sent and the acknowledgement is received; I think, LWIP is
supposed to increment the tcp_sndbuf( ) value so that the next set of data
can be sent right ? Should I do something in the http_sent callback to make
room for next set of data ?

Thanks
Anand

On Wed, Aug 31, 2016 at 6:42 PM, goldsimon <goldsi...@gmx.de> wrote:

> Calling tcp_output() sends the data, but that doesn't mean the buffer is
> free afterwards: it stays allocated until the remote host acknowledges it.
> At this point, lwip calls your 'sent' callback.
>
> Simon
>
> Gesendet mit AquaMail für Android
> http://www.aqua-mail.com
>
> Am 31. August 2016 12:22:08 nachm. schrieb anand arjunan <
> anand.ar...@gmail.com>:
>
>> Hi,
>>
>> I am using LWIP (Raw TCP mode) (in FreeRTOS) for handling http page
>> requests, construct the web page and send the page to the client. I have
>> set the TCP_SND_BUF as 8*TCP_MSS where TCP_MSS is 1460. There will be only
>> one client / browser connecting to the system at a time.
>>
>> In the receive call back function, I constructed the entire web page and
>> used the tcp_write () (with TCP_WRITE_FLAG_COPY ) to send the data to LWIP
>> buffer. Due to memory limitations, I have to reuse a buffer size of 2.5 K
>> to construct the page before writing it to LWIP using tcp_write () as the
>> actual page size to be sent to client is more than 14 K. I was thinking
>> that as and when I call tcp_output () the data would be
>> sent instantaneously to the client. But, I got to know that tcp_Output()
>> does not work in the callback function and LWIP will start sending the
>> packets automatically once the control is out of the callback function.
>>
>> Due to this limitation I slightly modified the design. I have made the
>> actual LWIP receive callback to just set another (second) callback function
>> so that the actual LWIP callback would return immediately (so that
>> tcp_output( ) can work). The second callback would actually construct the
>> page and would be invoked by http_poll function or some other timer.
>>
>> Even this does not work. It still accumulates the data worth of of 8*1460
>> bytes fully and sends only that much to the client. Once the buffer is
>> full, tcp_sndbuf(pcb) returns zero and I cannot write anymore to it. I
>> thought this would return non zero value as I am calling tcp_output ( )
>> outside the LWIP calling function using a timer function.
>>
>> I tried disabling the nagle's algorithm using tcp_nagle_disbale( ) before
>> transmitting the packets. That did not help either.
>>
>> I want the data to be sent to the client (without accumulating) as and
>> when I call tcp_output( ) because of the limitation that I can construct
>> only 2.5 K bytes of page at a time and reuse it to construct the next
>> section of the page.
>>
>> Please help. Any help / pointers would be appreciated.
>>
>> Thanks
>> LWIP_Starter
>> _______________________________________________
>> lwip-users mailing list
>> lwip-users@nongnu.org
>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>>
>
> _______________________________________________
> lwip-users mailing list
> lwip-users@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to