Refer to
Receiving UDP Data (zero copy interface) for receiving data using UDP zero copy interface.
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
using the zero copy interface. In the example it is assumed that the socket has already been created
and connected.
BUFFER_SIZE 512
static void prvEchoClientRxTask( void *pvParameters )
{
Socket_t xSocket;
static char cRxedData[ BUFFER_SIZE ];
BaseType_t lBytesReceived;
xSocket = ( Socket_t ) pvParameters;
for( ;; )
{
uint8_t *pucZeroCopyRxBuffPtr = NULL;
lBytesReceived = FreeRTOS_recv( xSocket,
&pucZeroCopyRxBuffPtr,
ipconfigTCP_MSS,
FREERTOS_ZERO_COPY );
if( pucZeroCopyRxBuffPtr != NULL )
{
memcpy( &cRxedData, pucZeroCopyRxBuffPtr, lBytesReceived );
FreeRTOS_ReleaseTCPPayloadBuffer( xSocket, pucZeroCopyRxBuffPtr, lBytesReceived );
}
if( lBytesReceived > 0 )
{
prvProcessData( cRxedData, lBytesReceived );
}
else if( lBytesReceived == 0 )
{
}
else
{
FreeRTOS_shutdown( xSocket, FREERTOS_SHUT_RDWR );
break;
}
}
while( FreeRTOS_recv( xSocket, pcBufferToTransmit, xTotalLengthToSend, 0 ) >= 0 )
{
vTaskDelay( pdTICKS_TO_MS( 250 ) );
}
FreeRTOS_closesocket( xSocket );
xTaskDelete( NULL );
}
Example using FreeRTOS_recv()
<<
Back to the RTOS TCP networking tutorial index
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.