FreeRTOS_sockets.h
void FreeRTOS_FD_CLR( Socket_t xSocket, SocketSet_t xSocketSet, BaseType_t xBitsToClear );
Sockets in a socket set have a number of associated event bits of interest.
An event bit of interest becoming set will cause the socket to unblock a
call to FreeRTOS_select(). Event bits of interest are set using the
FreeRTOS_FD_SET()
API function, and cleared using the FreeRTOS_FD_CLR() API function. If
all the event bits are clear then the socket will be removed from the
socket set.
ipconfigSUPPORT_SELECT_FUNCTION must be set to 1 in
FreeRTOSIPConfig.h
for FreeRTOS_FD_CLR() to be available.
Each socket member has its own set of event bits, which can be a bitwise
OR combination of the following values:
eSELECT_READ
|
For a socket that is reading data, the eSELECT_READ event
will be pending in a socket as long as the socket contains
unread data.
For a socket that is listening for new connections, the
eSELECT_READ event will be pended each time a new connection
is received.
|
eSELECT_WRITE
|
The eSELECT_WRITE event will remain pending as long as the
socket has space for writing.
If a TCP socket is actively connecting to a pear the
eSELECT_WRITE event will be triggered as soon as the connection
is established.
One the eSELECT_WRITE event has been pended it should either
be disabled, or the caller should write enough data to the
socket so as to completely fill up the transmit buffer -
otherwise the pending eSELECT_WRITE event will not be cleared.
|
eSELECT_EXCEPT
|
The eSELECT_EXCEPT event will become pending if the socket
gets disconnected.
|
eSELECT_INTR
|
If any socket is signaled during the call, using FreeRTOS_SignalSocket() or
FreeRTOS_SignalSocketFromISR(), then eSELECT_INTR is returned. Note that it's
triggered only when ipconfigSUPPORT_SIGNALS is defined.
|
Parameters:
xSocket
|
The socket having a bit of interest cleared or being
removed from the socket set.
|
xSocketSet
|
The socket set the socket is a member of.
|
xBitsToClear
|
The bits which should be cleared, use 'eSELECT_ALL' to clear all
bits and remove the socket from the set.
|
Returns:
void
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "FreeRTOS_IP.h"
#include "FreeRTOS_Sockets.h"
void vConnectExample( )
{
Socket_t xSocket;
struct freertos_sockaddr xEchoServerAddress;
const TickType_t xZeroTimeOut = 0;
SocketSet_t xSocketSet;
xSocket = FreeRTOS_socket( FREERTOS_AF_INET4, FREERTOS_SOCK_STREAM, FREERTOS_IPPROTO_TCP );
xSocketSet = FreeRTOS_CreateSocketSet()( );
FreeRTOS_FD_SET( xSocket, xSocketSet, eSELECT_WRITE );
FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_RCVTIMEO, &xZeroTimeOut, sizeof( xZeroTimeOut ) );
FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_SNDTIMEO, &xZeroTimeOut, sizeof( xZeroTimeOut ) );
xEchoServerAddress.sin_port = FreeRTOS_htons( echoECHO_PORT );
xEchoServerAddress.sin_addr = FreeRTOS_inet_addr_quick( configECHO_SERVER_ADDR0,
configECHO_SERVER_ADDR1,
configECHO_SERVER_ADDR2,
configECHO_SERVER_ADDR3 );
FreeRTOS_connect( xSocket, &xEchoServerAddress, sizeof( xEchoServerAddress ) );
if( FreeRTOS_select( xSocketSet, 30000 ) != 0 )
{
BaseType_t xMask = FreeRTOS_FD_ISSET ( xSocket, xSocketSet );
if( xMask != 0 )
{
FreeRTOS_FD_CLR( xSocket, xSocketSet, eSELECT_WRITE );
FreeRTOS_FD_SET( xSocket, xSocketSet, eSELECT_READ );
}
}
}
Example use of the FreeRTOS_FD_SET / FD_CLR / FD_ISSET() API functions
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.