[ ]
 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Homepage FreeRTOS Labs FreeRTOS+TCP FreeRTOS+FAT Contact / Enquiries


FreeRTOS+TCP is still in the lab
FreeRTOS+TCP is already used in commercial products and we encourage you to try it yourself. Be aware however that we are still refining its design, and the source code and documentation do not yet meet Real Time Engineers Ltd's strict quality standards.
Please use the forum for support, feedback and ideas, or contact us directly if you have a specific business interest.

FreeRTOS_FD_CLR()

[FreeRTOS+TCP API Reference]

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.

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


/* FreeRTOS includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"

/* FreeRTOS+TCP includes. */
#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;

    /* Create a TCP socket. */
    xSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_STREAM, FREERTOS_IPPROTO_TCP );

    /* Create a socket set. */
    xSocketSet = FreeRTOS_CreateSocketSet()( );

    /* Make the socket a member of the set.
    Only the WRITE event can unblock a call to select() */
    FreeRTOS_FD_SET( xSocket, xSocketSet, eSELECT_WRITE );

    /* When working with select(), time-outs on API's aren't necessary */
    FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_RCVTIMEO, &xZeroTimeOut, sizeof( xZeroTimeOut ) );
    FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_SNDTIMEO, &xZeroTimeOut, sizeof( xZeroTimeOut ) );

    /* Fill in the peer's address */
    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 );

    /* Now initiate an active connect procedure to a peer. This call is non-blocking */
    FreeRTOS_connect( xSocket, &xEchoServerAddress, sizeof( xEchoServerAddress ) );

    /* Now block for at most 30 seconds. A successful connection will unblock
    select() with a eSELECT_WRITE event */
    if( FreeRTOS_select( xSocketSet, 30000 ) != 0 )
    {
        BaseType_t xMask = FreeRTOS_FD_ISSET ( xSocket, xSocketSet );
        if( xMask != 0 )
        {
            /* Clear the WRITE event bit, it is not interesting any more */
            FreeRTOS_FD_CLR( xSocket, xSocketSet, eSELECT_WRITE );

            /* Set the READ event bit */
            FreeRTOS_FD_SET( xSocket, xSocketSet, eSELECT_READ );
        }
    }
}
						
Example use of the FreeRTOS_FD_SET / FD_CLR / FD_ISSET() API functions


[ Back to the top ]    [ About FreeRTOS ]    [ FreeRTOS Labs Sitemap ]    [ Main FreeRTOS Sitemap ]    [ ]




Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.