The
FreeRTOS_recvfrom()
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.
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 snippets below show a RTOS task that creates a socket before entering
a loop that receives data using the standard (as opposed to zero copy)
calling semantics. Both IPv4 and IPv6 use cases are shown.
IPv4
static void vUDPReceivingUsingStandardInterface( void *pvParameters )
{
long lBytes;
uint8_t cReceivedString[ 60 ];
struct freertos_sockaddr xClient, xBindAddress;
uint32_t xClientLength = sizeof( xClient );
Socket_t xListeningSocket;
xListeningSocket = FreeRTOS_socket( FREERTOS_AF_INET,
FREERTOS_SOCK_DGRAM,
FREERTOS_IPPROTO_UDP );
configASSERT( xListeningSocket != FREERTOS_INVALID_SOCKET );
xBindAddress.sin_port = FreeRTOS_htons( 10000 );
FreeRTOS_bind( xListeningSocket, &xBindAddress, sizeof( xBindAddress ) );
for( ;; )
{
lBytes = FreeRTOS_recvfrom( xListeningSocket,
cReceivedString,
sizeof( cReceivedString ),
0,
&xClient,
&xClientLength );
if( lBytes > 0 )
{
}
}
}
Example using FreeRTOS_recvfrom() with the standard (as opposed to zero copy) calling semantics
IPv6
static void vUDPReceivingUsingStandardInterface( void *pvParameters )
{
long lBytes;
uint8_t cReceivedString[ 60 ];
struct freertos_sockaddr xClient, xBindAddress;
uint32_t xClientLength = sizeof( xClient );
Socket_t xListeningSocket;
xListeningSocket = FreeRTOS_socket( FREERTOS_AF_INET6,
FREERTOS_SOCK_DGRAM,
FREERTOS_IPPROTO_UDP );
configASSERT( xListeningSocket != FREERTOS_INVALID_SOCKET );
xBindAddress.sin_port = FreeRTOS_htons( 10000 );
FreeRTOS_bind( xListeningSocket, &xBindAddress, sizeof( xBindAddress ) );
for( ;; )
{
lBytes = FreeRTOS_recvfrom( xListeningSocket,
cReceivedString,
sizeof( cReceivedString ),
0,
&xClient,
&xClientLength );
if( lBytes > 0 )
{
}
}
}
Example using FreeRTOS_recvfrom() with the standard (as opposed to zero copy) calling semantics
<<
Back to the RTOS TCP networking tutorial index
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.