TCP
套接字
:
如果套接字用于实现
服务器 ,则调用
FreeRTOS_listen() 将套接字置于侦听状态,并调用
收听状态,并拨打
FreeRTOS_accept()
接受传入连接。 本页提供了源代码示例
。
要更改 TCP 套接字使用的接收和发送缓冲区的默认大小,
可分别通过以下参数调用 FreeRTOS_setsockopt():
FREERTOS_SO_RCVBUF 和
FREERTOS_SO_SNDBUF。 该操作必须在套接字创建后、
连接前立即完成。
如果 ipconfigUSE_TCP_WIN
在 FreeRTOSIPConfig.h 中设置为 1,
套接字将使用滑动窗口
最大限度地降低开销并最大限度地提高吞吐量。 可以使用
FREERTOS_SO_WIN_PROPERTIES
参数将滑动窗口的默认大小更改为 FreeRTOS_setsockopt()。 指定滑动窗口的大小以
MSS 为单位(因此,如果 MSS 设置为 200 字节,则滑动窗口大小为
2, 即 400 字节) ,
并且必须始终小于或等于两个方向上的内部缓冲区的大小。
默认情况下,可自动创建子套接字处理在侦听的
TCP/IP 套接字上接受的任何连接(可以通过调用
FreeRTOS_setsockopt() 的 FREERTOS_SO_REUSE_LISTEN_SOCKET 参数更改默认行为)。
子套接字继承其父套接字的缓冲区大小和滑动窗口大小
。
下述示例一演示了如何创建、配置并绑定
客户端套接字。 下述示例二演示了如何创建、
配置并绑定服务器套接字,
以及如何在服务器套接字上接受新连接。
void vCreateTCPClientSocket( void )
{
Socket_t xClientSocket;
socklen_t xSize = sizeof( freertos_sockaddr );
static const TickType_t xTimeOut = pdMS_TO_TICKS( 2000 );
xClientSocket = FreeRTOS_socket( FREERTOS_AF_INET4,
SOCK_STREAM,
IPPROTO_TCP );
configASSERT( xClientSocket != FREERTOS_INVALID_SOCKET );
FreeRTOS_setsockopt( xClientSocket,
0,
FREERTOS_SO_RCVTIMEO,
&xTimeOut,
sizeof( xTimeOut ) );
FreeRTOS_setsockopt( xClientSocket,
0,
FREERTOS_SO_SNDTIMEO,
&xTimeOut,
sizeof( xTimeOut ) );
FreeRTOS_bind( xClientSocket, NULL, xSize );
}
创建、配置和绑定 TCP 套接字
void vCreateTCPServerSocket( void )
{
struct freertos_sockaddr xClient, xBindAddress;
Socket_t xListeningSocket, xConnectedSocket;
socklen_t xSize = sizeof( xClient );
static const TickType_t xReceiveTimeOut = portMAX_DELAY;
const BaseType_t xBacklog = 20;
xListeningSocket = FreeRTOS_socket( FREERTOS_AF_INET4,
SOCK_STREAM,
IPPROTO_TCP );
configASSERT( xListeningSocket != FREERTOS_INVALID_SOCKET );
FreeRTOS_setsockopt( xListeningSocket,
0,
FREERTOS_SO_RCVTIMEO,
&xReceiveTimeOut,
sizeof( xReceiveTimeOut ) );
xBindAddress.sin_port = ( uint16_t ) 10000;
xBindAddress.sin_port = FreeRTOS_htons( xBindAddress.sin_port );
FreeRTOS_bind( xListeningSocket, &xBindAddress, sizeof( xBindAddress ) );
FreeRTOS_listen( xListeningSocket, xBacklog );
for( ;; )
{
xConnectedSocket = FreeRTOS_accept( xListeningSocket, &xClient, &xSize );
configASSERT( xConnectedSocket != FREERTOS_INVALID_SOCKET );
xTaskCreate( prvServerConnectionInstance,
"EchoServer",
usUsedStackSize,
( void * ) xConnectedSocket,
tskIDLE_PRIORITY,
NULL );
}
}
创建、配置和绑定 TCP 套接字
<<
返回 RTOS TCP 网络教程索引
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.