As detailed on the FreeRTOS_recvfrom() API reference page, FreeRTOS_recvfrom() can be used with standard calling semantics, or zero copy calling semantics. This page demonstrates the standard calling semantics.
The source code below shows a RTOS task that creates a socket before entering a loop that receives data using the standard (as opposed to zero copy) calling semantics.
static void vUDPReceivingUsingStandardInterface( void *pvParameters ) { long lBytes; uint8_t cReceivedString[ 60 ]; struct freertos_sockaddr xClient, xBindAddress; uint32_t xClientLength = sizeof( xClient ); Socket_t xListeningSocket; /* Attempt to open the socket. */ xListeningSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM,/*FREERTOS_SOCK_DGRAM for UDP.*/ FREERTOS_IPPROTO_UDP ); /* Check the socket was created. */ configASSERT( xListeningSocket != FREERTOS_INVALID_SOCKET ); /* Bind to port 10000. */ xBindAddress.sin_port = FreeRTOS_htons( 10000 ); FreeRTOS_bind( xListeningSocket, &xBindAddress, sizeof( xBindAddress ) ); for( ;; ) { /* Receive data from the socket. ulFlags is zero, so the standard interface is used. By default the block time is portMAX_DELAY, but it can be changed using FreeRTOS_setsockopt(). */ lBytes = FreeRTOS_recvfrom( xListeningSocket, cReceivedString, sizeof( cReceivedString ), 0, &xClient, &xClientLength ); if( lBytes > 0 ) { /* Data was received and can be process here. */ } } } Example using FreeRTOS_recvfrom() with the standard (as opposed to zero copy) calling semantics
<<
Back to the RTOS TCP networking tutorial index