Receiving UDP Data (standard interface)
TCP/IP stack API function is used to receive from a UDP socket.
Data can only be received after the
socket has been
created, configured, and
bound to a local port number.
Part of the FreeRTOS+TCP Networking Tutorial
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 )
uint8_t cReceivedString[ 60 ];
struct freertos_sockaddr xClient, xBindAddress;
uint32_t xClientLength = sizeof( xClient );
/* Attempt to open the socket. */
xListeningSocket = FreeRTOS_socket( FREERTOS_AF_INET,
FREERTOS_SOCK_DGRAM,/*FREERTOS_SOCK_DGRAM for 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,
sizeof( cReceivedString ),
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