FreeRTOS TCP Stack running out of headp creating a stream

I’m trying to chase down an out of heap memory problem when a TCP socket is created. heap2 malloc fails requesting 5872 bytes. This looks like it’s based on creating stream buffers via…

ifndef ipconfigTCPRXBUF_LEN

#define ipconfigTCP_RX_BUF_LEN          ( 4 * ipconfigTCP_MSS ) /* defaults to 5840 bytes */

endif

/* Define the size of Tx stream buffer for TCP sockets */

ifndef ipconfigTCPTXBUF_LEN

define ipconfigTCPTXBUFLEN ( 4 * ipconfigTCPMSS ) /* defaults to 5840 bytes */

This seems ot add up to >10K per tcp socket. Can I reduce TCP_MSS to something smaller? Can it be less than an ethernet Mtu? Thanks Larry

FreeRTOS TCP Stack running out of headp creating a stream

Hi Larry, About posting: you can include literal code if you put it between two lines which only contain 5 tildas ~~~~~, as here: ~~~~~ int function( void ) { /* This is a comment */ return 0; } ~~~~~ I’m glad you traced down the problem.
This seems ot add up to >10K per tcp socket. Can I reduce TCP_MSS to something smaller? Can it be less than an ethernet Mtu?
This is a TCP packet:
1) Ethernet header = 14 bytes
2) IP-header = 20 bytes
3) TCP-header = 20 bytes
4) TCP contents/payload <= MSS
MTU (Maximum Transmission Unit) equals MSS + 40. The ‘Ethernet header’ of 14 bytes is not included in the MTU. I would recommend bringing down the MTU for testing, e.g.:
#define ipconfigNETWORK_MTU    800
The value of MSS will automatically adapt:
#define ipconfigTCP_MSS ( ipconfigNETWORK_MTU - ipSIZE_OF_IP_HEADER - ipSIZE_OF_TCP_HEADER )
which is 1000 – 40 = 960 bytes. This post might also be interesting for you:
https://sourceforge.net/p/freertos/discussion/382005/thread/a9c8fc93/?limit=25#5a90
Regards, Hein

FreeRTOS TCP Stack running out of headp creating a stream

Are you using BufferAllocation2.c? If so, please note you need to use heap4.c, not heap2.c: http://www.freertos.org/FreeRTOS-Plus/FreeRTOSPlusTCP/EmbeddedEthernetBufferManagement.html Regards.