在ADDRINFOW结构中,AI_FQDN和AI_CANONNAME字段用于指示主机的完全限定域名(Fully Qualified Domain Name,FQDN)和规范名称(Canonical Name)。
AI_FQDN字段表示主机的完全限定域名,即主机名和域名的组合。这个字段通常用于标识主机的全局唯一性。当AI_FQDN字段被设置时,它将包含主机的完全限定域名字符串。
AI_CANONNAME字段表示主机的规范名称,也称为别名。这个字段通常用于标识主机的别名或规范名称。当AI_CANONNAME字段被设置时,它将包含主机的规范名称字符串。
以下是一个使用getaddrinfo函数来获取主机信息并访问AI_FQDN和AI_CANONNAME字段的示例代码:
#include
#include
#include
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("Failed to initialize winsock\n");
return 1;
}
struct addrinfoW hints;
struct addrinfoW* result;
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
// Replace "example.com" with the host you want to query
int status = GetAddrInfoW(L"example.com", NULL, &hints, &result);
if (status != 0) {
printf("getaddrinfo failed: %d\n", status);
WSACleanup();
return 1;
}
// Loop through the linked list of host entries
for (struct addrinfoW* ptr = result; ptr != NULL; ptr = ptr->ai_next) {
printf("AI_FQDN: %ls\n", ptr->ai_canonname);
printf("AI_CANONNAME: %ls\n", ptr->ai_canonname);
}
FreeAddrInfoW(result);
WSACleanup();
return 0;
}
在上述示例中,GetAddrInfoW函数使用了AI_CANONNAME字段来获取主机的规范名称,并使用AI_FQDN字段来获取主机的完全限定域名。注意替换example.com为你想要查询的主机。