xSocket_t FreeRTOS_select( xSocketSet_t xSocketSet, TickType_t xBlockTimeTicks );
Block on a socket set until a member of the set contains data available
Socket Sets allow an application task to block when reading from multiple
sockets at the same time. Instead of blocking on an individual socket, a
task instead blocks on the set.
To use a socket set:
A socket can only be a member of one set at any time.
Create a socket set by calling FreeRTOS_CreateSocketSet().
A socket set is equivalent to the Berkeley sockets fd_set type.
Add one or more sockets to the set using calls to FreeRTOS_FD_SET().
FreeRTOS_FD_SET() is equivalent to the Berkeley sockets FD_SET() macro.
Call FreeRTOS_Select() to test the sockets in the set to see if any contain data that is
waiting to be read.
Read from the socket returned by FreeRTOS_select() (if any) using
a call to FreeRTOS_recvfrom() as normal.
FreeRTOS_FD_CLR() removes a socket from a set.
The socket set being tested.
The maximum time, in ticks, that the calling task will
remain in the Blocked state (with other tasks executing)
to wait for a member of the socket set to have data queued
ready for reading using a call to FreeRTOS_recvfrom().
If xBlockTimeTicks expired before a socket in the socket set was ready
to be read then NULL is returned. Otherwise a handle to a socket that
contains received data is returned. A call to FreeRTOS_recvfrom() on the
returned socket handle will always receive data even when the
FreeRTOS_recvfrom() block time is zero.
static void prvMultipleSocketRxTask( void *pvParameters )
struct freertos_sockaddr xAddress;
uint32_t xClientLength = sizeof( struct freertos_sockaddr ), x;
uint32_t ulReceivedValue = 0;
const TickType_t xRxBlockTime = 0;
xFD_Set = FreeRTOS_CreateSocketSet( selSELECT_QUEUE_SIZE );
for( x = 0; x < 2; x++ )
xSocket = FreeRTOS_socket( FREERTOS_AF_INET,
xAddress.sin_port = FreeRTOS_htons( 1000 + x );
FreeRTOS_bind( xSocket, &xAddress, sizeof( struct freertos_sockaddr ) );
FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_RCVTIMEO,
&xRxBlockTime, sizeof( xRxBlockTime ) );
FreeRTOS_FD_SET( xSocket, xFD_Set );
for( ;; )
xSocket = FreeRTOS_select( xFD_Set, portMAX_DELAY );
configASSERT( xSocket );
lBytes = FreeRTOS_recvfrom( xSocket, &( ulReceivedValue ),
sizeof( uint32_t ), 0, &xAddress,
Example use of the FreeRTOS_close() API function
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.