BaseType_t FreeRTOS_closesocket( Socket_t xSocket );
Close a socket.
The function is named FreeRTOS_closesocket() rather than simply FreeRTOS_close() to avoid potential name space collisions with functions in FreeRTOS+IO.
A socket should be shutdown gracefully before it is closed, and cannot be used after it has been closed.
Parameters:
| xSocket |
The handle of the socket being closed. The socket
must have already been created (see
FreeRTOS_socket()),
and cannot be used after it has been closed.
|
0 is always returned.
Although FreeRTOS+TCP does not [currently] use the return value in a meaningful way, the return value is included in the function prototype to ensure consistency with the expected standard Berkeley sockets API, and to ensure compatibility with future versions of FreeRTOS+TCP.
Example usage:
/* FreeRTOS+TCP sockets include. */ #define "FreeRTOS_sockets.h" void aFunction( void ) { Socket_t xSocket; /* Create a socket. */ xSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP ); if( xSocket != FREERTOS_INVALID_SOCKET ) { /* * The socket can now be used... */ /* . . . */ /* Initialise a shutdown before closing the socket. */ FreeRTOS_shutdown( xSocket ); /* Wait for the socket to disconnect gracefully (indicated by FreeRTOS_recv() returning a FREERTOS_EINVAL error) before closing the socket. */ while( FreeRTOS_recv( xSocket, pcBufferToTransmit, xTotalLengthToSend, 0 ) >= 0 ) { /* Wait for shutdown to complete. If a receive block time is used then this delay will not be necessary as FreeRTOS_recv() will place the RTOS task into the Blocked state anyway. */ vTaskDelay( pdTICKS_TO_MS( 250 ) ); /* Note - real applications should implement a timeout here, not just loop forever. */ } /* Close the socket again. */ FreeRTOS_closesocket( xSocket ); } } Example use of the FreeRTOS_closesocket() API function