Receiving Data Using a TCP Socket
Part of the FreeRTOS+TCP Networking Tutorial

[Note: This page does not describe the callback or zero copy interfaces, which are available for expert users.]

FreeRTOS_recv() is used to receive data from a TCP socket. FreeRTOS_recv() cannot be called until the TCP socket has been created, configured, bound and connected to a remote socket.

The source code below demonstrates how to use FreeRTOS_recv() to place received data into a buffer. In the example it is assumed that the socket has already been created and connected. #define BUFFER_SIZE 512 static void prvEchoClientRxTask( void *pvParameters ) { Socket_t xSocket; static char cRxedData[ BUFFER_SIZE ]; BaseType_t lBytesReceived; /* It is assumed the socket has already been created and connected before being passed into this RTOS task using the RTOS task's parameter. */ xSocket = ( Socket_t ) pvParameters; for( ;; ) { /* Receive another block of data into the cRxedData buffer. */ lBytesReceived = FreeRTOS_recv( xSocket, &cRxedData, BUFFER_SIZE, 0 ); if( lBytesReceived > 0 ) { /* Data was received, process it here. */ prvPorcessData( cRxedData, lBytesReceived ); } else if( lBytesReceived == 0 ) { /* No data was received, but FreeRTOS_recv() did not return an error. Timeout? */ } else { /* Error (maybe the connected socket already shut down the socket?). Attempt graceful shutdown. */ FreeRTOS_shutdown( xSocket, FREERTOS_SHUT_RDWR ); break; } } /* The RTOS task will get here if an error is received on a read. Ensure the socket has shut down (indicated by FreeRTOS_recv() returning a FREERTOS_EINVAL error before closing the socket). */ while( FreeRTOS_recv( xSocket, pcBufferToTransmit, xTotalLengthToSend, 0 ) >= 0 ) { /* Wait for shutdown to complete. If a receive block time is used then this delay will not be necessary as FreeRTOS_recv() will place the RTOS task into the Blocked state anyway. */ vTaskDelay( pdTICKS_TO_MS( 250 ) ); /* Note - real applications should implement a timeout here, not just loop forever. */ } /* Shutdown is complete and the socket can be safely closed. */ FreeRTOS_closesocket( xSocket ); /* Must not drop off the end of the RTOS task - delete the RTOS task. */ xTaskDelete( NULL ); } Example using FreeRTOS_recv()


<< Back to the RTOS TCP networking tutorial index