FreeRTOS_DNS.h
BaseType_t FreeRTOS_getaddrinfo_a( const char * pcName,
const char * pcService,
const struct freertos_addrinfo * pxHints,
struct freertos_addrinfo ** ppxResult,
FOnDNSEvent pCallback,
void * pvSearchID,
TickType_t uxTimeout );
后缀 "_a " 代表异步,表示该函数是一个非阻塞函数。API 功能
与 FreeRTOS_getaddrinfo 相同,
但可以异步执行多个 IP 查找。这意味着调用立即返回,
而查找则在后台进行。一旦查询完成或超时,
将调用用户定义的函数 pCallback 返回更新的结果。
参数:
- pcName
- 节点或设备的名称。
- pcService
- 暂时忽略。
- pxHints
- 如果不为 NULL ,则可用于指示首选类型的 IP ( v4 或 v6 )。
- ppxResult
- 分配的结构体,包含结果。
- pCallback
- 当找到地址或超时时调用的回调函数。
- pvSearchID
- 回调函数的搜索 ID。
- uxTimeout
- 回调函数超时。
回调函数应为以下类型:
void (* FOnDNSEvent ) ( const char * ,
void * ,
struct freertos_addrinfo * );
其中,
pcName
是要查询的节点或设备的名称,
pvSearchID
是调用
FreeRTOS_getaddrinfo_a
查询时传递的 ID,
pxAddressInfo
包含查询结果。
用法示例:
#include "FreeRTOS_DNS.h"
static BaseType_t xDNSResult = -2;
static void vDNSEvent( const char * pcName,
void * pvSearchID,
struct freertos_addrinfo * pxAddrInfo )
{
( void ) pcName;
( void ) pvSearchID;
FreeRTOS_printf( ( "vDNSEvent: called with %p\n", pxAddrInfo ) );
showAddressInfo( pxAddrInfo );
if( pxAddrInfo != NULL )
{
xDNSResult = 0;
}
}
static void dnsTest( const char * pcHostName )
{
uint32_t ulID;
BaseType_t rc;
if( xApplicationGetRandomNumber( &( ulID ) ) != pdFALSE )
{
FreeRTOS_dnsclear();
xDNSResult = -2;
rc = FreeRTOS_getaddrinfo_a( pcHostName,
NULL,
&xHints,
&pxResult,
vDNSEvent,
( void * ) ulID,
pdMS_TO_TICKS( 1000U ) );
vTaskDelay( pdMS_TO_TICKS( 1000U ) );
rc = xDNSResult;
FreeRTOS_printf( ( "Lookup '%s': %d\n", pcHostName, rc ) );
}
else
{
FreeRTOS_printf( ( "dns_test: Failed to generate a random SearchID\n" ) );
}
}
Example use of the FreeRTOS_getaddrinfo_a() API function
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.