请参阅
接收 UDP 数据(零拷贝接口),了解关于使用 UDP 零拷贝接口接收数据的内容。
FreeRTOS_recv() 用于从
TCP 套接字接收数据。FreeRTOS_recv()
无法调用,直到 TCP 套接字
创建、
配置、绑定并连接到远程套接字。
下述源代码演示了如何通过 FreeRTOS_recv(),
使用零拷贝接口将收到的数据放入缓冲区。在本例中,假设套接字已创建
并连接。
BUFFER_SIZE 512
static void prvEchoClientRxTask( void *pvParameters )
{
Socket_t xSocket;
static char cRxedData[ BUFFER_SIZE ];
BaseType_t lBytesReceived;
xSocket = ( Socket_t ) pvParameters;
for( ;; )
{
uint8_t *pucZeroCopyRxBuffPtr = NULL;
lBytesReceived = FreeRTOS_recv( xSocket,
&pucZeroCopyRxBuffPtr,
ipconfigTCP_MSS,
FREERTOS_ZERO_COPY );
if( pucZeroCopyRxBuffPtr != NULL )
{
memcpy( &cRxedData, pucZeroCopyRxBuffPtr, lBytesReceived );
FreeRTOS_ReleaseTCPPayloadBuffer( xSocket, pucZeroCopyRxBuffPtr, lBytesReceived );
}
if( lBytesReceived > 0 )
{
prvProcessData( cRxedData, lBytesReceived );
}
else if( lBytesReceived == 0 )
{
}
else
{
FreeRTOS_shutdown( xSocket, FREERTOS_SHUT_RDWR );
break;
}
}
while( FreeRTOS_recv( xSocket, pcBufferToTransmit, xTotalLengthToSend, 0 ) >= 0 )
{
vTaskDelay( pdTICKS_TO_MS( 250 ) );
}
FreeRTOS_closesocket( xSocket );
xTaskDelete( NULL );
}
使用 FreeRTOS_recv() 的示例
<<
返回 RTOS TCP 网络教程索引
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.