getaddrinfo(example.comの結果を表示)

getaddrinfoを使ってwww.example.comの名前解決を行うサンプルです。 このサンプルは、netshでポリシーテーブルを変更して、getaddrinfoが返す名前解決結果の順番が変わることを体験する動画で使っています。

サンプルコード


#include <iostream>
#include <WinSock2.h>
#include <WS2tcpip.h>

int main()
{
    const char* nodename = "www.example.com";
    struct addrinfo hints, *ppResult, *ptr;
    WSAData wsaData;
    LPSOCKADDR sa;
    TCHAR buf[48];
    DWORD buflen;
    int result;

    result = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (result != 0) {
        printf("WSAStartup failed: %dn", result);
        return 1;
    }
 
    memset(&hints, 0, sizeof(hints));
    hints.ai_family = PF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;

    result = getaddrinfo(nodename, NULL, &hints, &ppResult);
    if (result != 0) {
        printf("getaddrinfo : %dn", result);
        WSACleanup();
        return 1;
    }

    for (ptr = ppResult; ptr != NULL; ptr = ptr->ai_next) {
        memset(buf, 0, sizeof(buf));
        buflen = 48;

        switch (ptr->ai_family) {
        case AF_INET:
        case AF_INET6:
            sa = (LPSOCKADDR)ptr->ai_addr;
            result = WSAAddressToString(sa, (DWORD)ptr->ai_addrlen,
                                        NULL, buf, &buflen);
            printf("%lsn", buf);
            break;
        }
    }
    freeaddrinfo(ppResult);

    WSACleanup();
}

ダウンロード

cppコード

IPv6基礎検定

YouTubeチャンネルやってます!