下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

FreeRTOS_getaddrinfo_a()
[FreeRTOS-Plus-TCP API Reference]

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 * /* pcName */,
void * /* pvSearchID */,
struct freertos_addrinfo * /* pxAddressInfo */ );
其中, pcName 是要查询的节点或设备的名称, pvSearchID 是调用 FreeRTOS_getaddrinfo_a 查询时传递的 ID, pxAddressInfo 包含查询结果。

用法示例:


/* FreeRTOS-Plus-TCP DNS include. */
#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, /* An allocated struct, containing the results. */
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.