Condividi tramite


Funzione GetAddrInfoW (ws2tcpip.h)

La funzione GetAddrInfoW fornisce una conversione indipendente dal protocollo da un nome host Unicode a un indirizzo.

Sintassi

INT WSAAPI GetAddrInfoW(
  [in, optional] PCWSTR          pNodeName,
  [in, optional] PCWSTR          pServiceName,
  [in, optional] const ADDRINFOW *pHints,
  [out]          PADDRINFOW      *ppResult
);

Parametri

[in, optional] pNodeName

Puntatore a un NULLstringa Unicode con terminazione che contiene un nome host (nodo) o una stringa di indirizzo host numerico. Per il protocollo Internet, la stringa di indirizzo host numerico è un indirizzo IPv4 decimale punteggiato o un indirizzo esadecimale IPv6.

[in, optional] pServiceName

Puntatore a un NULLstringa Unicode con terminazione che contiene un nome del servizio o un numero di porta rappresentato come stringa.

Un nome del servizio è un alias stringa per un numero di porta. Ad esempio, "http" è un alias per la porta 80 definita da Internet Engineering Task Force (IETF) come porta predefinita usata dai server Web per il protocollo HTTP. I valori possibili per il parametro pServiceName quando non è specificato un numero di porta sono elencati nel file seguente:

%WINDIR%\system32\drivers\etc\services

[in, optional] pHints

Puntatore a una struttura addrinfoW che fornisce suggerimenti sul tipo di socket supportato dal chiamante.

I membri ai_addrlen, ai_canonname, ai_addre ai_next della struttura addrinfoW a cui punta il parametro pHints devono essere zero o NULL. In caso contrario, la funzione GetAddrInfoEx avrà esito negativo con WSANO_RECOVERY.

Per altri dettagli, vedere la sezione Osservazioni.

[out] ppResult

Puntatore a un elenco collegato di una o più strutture addrinfoW che contengono informazioni di risposta sull'host.

Valore restituito

L'operazione riuscita restituisce zero. L'errore restituisce un codice di errore windows Sockets diverso da zero, come indicato nella codici di errore di Windows Sockets.

La maggior parte dei codici di errore diversi da zero restituiti dalla funzione GetAddrInfoW mappa al set di errori descritti dalle raccomandazioni IETF (Internet Engineering Task Force). Nella tabella seguente sono elencati questi codici di errore e i relativi equivalenti WSA. È consigliabile usare i codici di errore WSA, perché offrono informazioni di errore familiari e complete per i programmatori Winsock.

Valore di errore Equivalente WSA Descrizione
EAI_AGAIN WSATRY_AGAIN Si è verificato un errore temporaneo nella risoluzione dei nomi.
EAI_BADFLAGS WSAEINVAL Per il membro ai_flags del parametro pHints è stato specificato un valore non valido.
EAI_FAIL WSANO_RECOVERY Si è verificato un errore irreversibile nella risoluzione dei nomi.
EAI_FAMILY WSAEAFNOSUPPORT Il membro ai_family del parametro pHints non è supportato.
EAI_MEMORY WSA_NOT_ENOUGH_MEMORY Si è verificato un errore di allocazione della memoria.
EAI_NONAME WSAHOST_NOT_FOUND Il nome non viene risolto per i parametri forniti o per i parametri pNodeName e non sono stati forniti parametri pServiceName.
EAI_SERVICE WSATYPE_NOT_FOUND Il parametro pServiceName non è supportato per il membro ai_socktype specificato del parametro pHints .
EAI_SOCKTYPE WSAESOCKTNOSUPPORT Il membro ai_socktype del parametro pHints non è supportato.
 

Utilizzare la funzione gai_strerror per stampare i messaggi di errore in base ai codici EAI_* restituiti dalla funzione GetAddrInfoW. La funzione gai_strerror viene fornita per la conformità con le raccomandazioni IETF, ma non è thread-safe. Pertanto, è consigliabile usare una funzione Windows Sockets tradizionale, ad esempio WSAGetLastError.

Codice di errore Significato
WSA_NOT_ENOUGH_MEMORY
Memoria insufficiente per eseguire l'operazione.
WSAEAFNOSUPPORT
È stato usato un indirizzo incompatibile con il protocollo richiesto. Questo errore viene restituito se il membro ai_family della struttura addrinfoW a cui punta il parametro hint .
WSAEINVAL
È stato fornito un argomento non valido. Questo errore viene restituito se è stato specificato un valore non valido per il membro ai_flags del addrinfoW struttura a cui punta il parametro hint .
WSAESOCKTNOSUPPORT
Il supporto per il tipo di socket specificato non esiste in questa famiglia di indirizzi. Questo errore viene restituito se il membro ai_socktype della struttura addrinfoW a cui punta il parametro hint .
WSAHOST_NOT_FOUND
Nessun host di questo tipo è noto. Questo errore viene restituito se il nome non viene risolto per i parametri specificati o se non sono stati specificati i parametri pNodename e pServicename parametri.
WSANO_DATA
Il nome richiesto è valido, ma non sono stati trovati dati del tipo richiesto.
WSANO_RECOVERY
Si è verificato un errore irreversibile durante una ricerca del database. Questo errore viene restituito se si è verificato un errore irreversibile nella risoluzione dei nomi.
WSANOTINITIALISED
Prima di usare questa funzione, è necessario eseguire una WSAStartup chiamata.
WSATRY_AGAIN
Si tratta in genere di un errore temporaneo durante la risoluzione del nome host e indica che il server locale non ha ricevuto una risposta da un server autorevole. Questo errore viene restituito quando si è verificato un errore temporaneo nella risoluzione dei nomi.
WSATYPE_NOT_FOUND
Impossibile trovare la classe specificata. Il parametro pServiceName non è supportato per il membro ai_socktype specificato della struttura addrinfoW a cui punta il parametro hint .

Osservazioni

La funzione GetAddrInfoW è la versione Unicode di una funzione che fornisce una conversione indipendente dal protocollo dal nome host all'indirizzo. La versione ANSI di questa funzione è getaddrinfo.

La funzione getAddrInfoW restituisce i risultati per lo spazio dei nomi NS_DNS. La funzione GetAddrInfoW aggrega tutte le risposte se più provider di spazi dei nomi restituiscono informazioni. Per l'uso con il protocollo IPv6 e IPv4, la risoluzione dei nomi può essere eseguita dal dns (Domain Name System), da un locale host file o da altri meccanismi di denominazione per lo spazio dei nomi NS_DNS.

Le macro nel file di intestazione Winsock definiscono un nome di funzione con maiuscole e minuscole GetAddrInfo e una struttura ADDRINFOT. Questa funzione GetAddrInfo deve essere chiamata con i parametri pNodeName e pServiceName di un puntatore di tipo TCHAR e pHints e ppResult parametri di tipo ADDRINFOT. Quando viene definito UNICODE o _UNICODE, GetAddrInfo viene definito per GetAddrInfoW, la versione Unicode della funzione e ADDRINFOT viene definita nella struttura addrinfoW. Quando UNICODE o _UNICODE non è definito, GetAddrInfo viene definito per getaddrinfo, la versione ANSI della funzione e ADDRINFOT viene definita alla struttura addrinfo .

Uno o entrambi i parametri pNodeName o pServiceName devono puntare a una stringa Unicode NULLcon terminazione; in genere vengono forniti entrambi.

In caso di esito positivo, viene restituito un elenco collegato di strutture addrinfoW nel parametro ppResult. L'elenco può essere elaborato seguendo il puntatore fornito nel membro ai_next di ogni struttura addrinfoW fino a quando non viene rilevato un puntatore NULL NULL. In ogni struttura addrinfoW restituita, i membri ai_family, ai_socktypee ai_protocol corrispondono ai rispettivi argomenti in una chiamata di funzione socket o WSASocket. Inoltre, il membro ai_addr in ogni addrinfoW struttura punta a una struttura di indirizzi socket compilata, la cui lunghezza viene specificata nel relativo membro ai_addrlen.

Se il parametro pNodeName punta a un nome computer, vengono restituiti tutti gli indirizzi permanenti per il computer che può essere utilizzato come indirizzo di origine. In Windows Vista e versioni successive, questi indirizzi includono tutti gli indirizzi IP unicast restituiti dal GetUnicastIpAddressTable o GetUnicastIpAddressEntry funzioni in cui il membro SkipAsSource è impostato su false nella struttura MIB_UNICASTIPADDRESS_ROW.

Se il parametro pNodeName punta a una stringa uguale a "localhost", vengono restituiti tutti gli indirizzi di loopback nel computer locale.

Se il parametro pNodeName contiene una stringa vuota, vengono restituiti tutti gli indirizzi registrati nel computer locale.

In Windows Server 2003 e versioni successive se il parametro pNodeName punta a una stringa uguale a ".. localmachine", vengono restituiti tutti gli indirizzi registrati nel computer locale.

Se il parametro pNodeName fa riferimento a un nome del server virtuale del cluster, vengono restituiti solo gli indirizzi del server virtuale. In Windows Vista e versioni successive, questi indirizzi includono tutti gli indirizzi IP unicast restituiti dal GetUnicastIpAddressTable o Funzioni GetUnicastIpAddressEntry in cui il membro SkipAsSource è impostato su true nella struttura MIB_UNICASTIPADDRESS_ROW. Per altre informazioni sul clustering, vedere Windows Clustering.

Windows 7 con Service Pack 1 (SP1) e Windows Server 2008 R2 con Service Pack 1 (SP1) aggiungono supporto a Netsh.exe per impostare l'attributo SkipAsSource su un indirizzo IP. Questo cambia anche il comportamento in modo che, se il SkipAsSource membro nella struttura MIB_UNICASTIPADDRESS_ROW è impostato su false, l'indirizzo IP verrà registrato in DNS. Se il membro SkipAsSource è impostato su true, l'indirizzo IP non viene registrato in DNS.

Un hotfix è disponibile per Windows 7 e Windows Server 2008 R2 che aggiunge il supporto a Netsh.exe per impostare l'attributo SkipAsSource su un indirizzo IP. Questo hotfix modifica anche il comportamento in modo che, se il membro SkipAsSource nella struttura MIB_UNICASTIPADDRESS_ROW è impostato su false, l'indirizzo IP verrà registrato in DNS. Se il membro SkipAsSource è impostato su true, l'indirizzo IP non viene registrato in DNS. Per altre informazioni, vedere 23861842386184Knowledge Base (KB).

È disponibile anche un hotfix simile per Windows Vista con Service Pack 2 (SP2) e Windows Server 2008 con Service Pack 2 (SP2) che aggiunge supporto a Netsh.exe per l'impostazione dell'attributo SkipAsSource in un indirizzo IP. Questo hotfix modifica anche il comportamento in modo che, se il membro SkipAsSource nella struttura MIB_UNICASTIPADDRESS_ROW è impostato su false, l'indirizzo IP verrà registrato in DNS. Se il membro SkipAsSource è impostato su true, l'indirizzo IP non viene registrato in DNS.

I chiamanti della funzione GetAddrInfoW possono fornire suggerimenti sul tipo di socket supportato tramite una struttura addrinfoW a cui punta il parametro pHints. Quando viene usato il parametro pHints , le regole seguenti si applicano alla struttura addrinfoW associata :

  • Il valore AF_UNSPEC per ai_family indica che il chiamante accetterà solo le famiglie di indirizzi AF_INET e AF_INET6. Si noti che AF_UNSPEC e PF_UNSPEC sono uguali.
  • Un valore pari a zero per ai_socktype indica che il chiamante accetterà qualsiasi tipo di socket.
  • Il valore zero per ai_protocol indica che il chiamante accetterà qualsiasi protocollo.
  • Il membro ai_addrlen deve essere impostato su zero.
  • Il membro ai_canonname deve essere impostato su NULL.
  • Il membro ai_addr deve essere impostato su NULL.
  • Il membro ai_next deve essere impostato su NULL.

Altri valori nella struttura addrinfoW fornita nel parametro pHints indicano requisiti specifici. Ad esempio, se il chiamante gestisce solo IPv4 e non gestisce IPv6, il membro ai_family deve essere impostato su AF_INET. Per un altro esempio, se il chiamante gestisce solo TCP e non gestisce UDP, il membro ai_socktype deve essere impostato su SOCK_STREAM.

Se il parametro pHints è un puntatore NULL, la funzione GetAddrInfoW la gestisce come se la struttura addrinfoW in pHints fosse inizializzata con il membro ai_family impostato su AF_UNSPEC e tutti gli altri membri impostati su zero.

In Windows Vista e versioni successive, quando getAddrInfoW viene chiamato da un servizio, se l'operazione è il risultato di un processo utente che chiama il servizio, il servizio deve rappresentare l'utente. Ciò consente di applicare correttamente la sicurezza.

La funzione getAddrInfoW può essere utilizzata per convertire una rappresentazione di stringa di testo di un indirizzo IP in una struttura addrinfoW che contiene una struttura sockaddr per l'indirizzo IP e altre informazioni. Per essere utilizzata in questo modo, la stringa a cui punta il parametro pNodeName deve contenere una rappresentazione testuale di un indirizzo IP e la struttura addrinfoW a cui punta il parametro pHints deve essere impostato il flag AI_NUMERICHOST nel membro ai_flags. La stringa a cui punta il parametro pNodeName può contenere una rappresentazione testuale di un indirizzo IPv4 o IPv6. L'indirizzo IP di testo viene convertito in una struttura addrinfoW a cui punta il parametro ppResult. La struttura addrinfoW restituita contiene una struttura sockaddr per l'indirizzo IP insieme ad altre informazioni sull'indirizzo IP. Affinché questo metodo funzioni con una stringa di indirizzo IPv6 in Windows Server 2003 e Windows XP, è necessario installare il protocollo IPv6 nel computer locale. In caso contrario, viene restituito l'errore WSAHOST_NOT_FOUND.

liberare informazioni sugli indirizzi dall'allocazione dinamica

Tutte le informazioni restituite dalla funzione GetAddrInfoW a cui punta il parametro ppResult viene allocato in modo dinamico, incluse tutte le strutture di addrinfoW , le strutture di indirizzi socket e le stringhe dei nomi host canoniche a cui puntano strutture addrinfoW. La memoria allocata da una chiamata riuscita a questa funzione deve essere rilasciata con una chiamata successiva a FreeAddrInfoW.

codice di esempio

Nell'esempio di codice seguente viene illustrato come usare la funzione
GetAddrInfoW .
#ifndef UNICODE
#define UNICODE
#endif

#define WIN32_LEAN_AND_MEAN

#include <winsock2.h>
#include <Ws2tcpip.h>
#include <stdio.h>

// Link with ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")

// set APPVER=5.02 for WinXP SP2 and later

int __cdecl wmain(int argc, wchar_t **argv)
{

    //-----------------------------------------
    // Declare and initialize variables
    WSADATA wsaData;
    int iResult;
    INT iRetval;

    DWORD dwRetval;

    int i = 1;
    
    ADDRINFOW *result = NULL;
    ADDRINFOW *ptr = NULL;
    ADDRINFOW hints;

//    struct sockaddr_in6 *sockaddr_ipv6;
    LPSOCKADDR sockaddr_ip;

    wchar_t ipstringbuffer[46];
    DWORD ipbufferlength = 46;

    // Validate the parameters
    if (argc != 3) {
        wprintf(L"usage: %ws <hostname> <servicename>\n", argv[0]);
        wprintf(L"getaddrinfow provides protocol-independent translation\n");
        wprintf(L"   from an Unicode host name to an IP address\n");
        wprintf(L"%ws example usage\n", argv[0]);
        wprintf(L"   %ws www.contoso.com 0\n", argv[0]);
        return 1;
    }


    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0) {
        wprintf(L"WSAStartup failed: %d\n", iResult);
        return 1;
    }

    //--------------------------------
    // Setup the hints address info structure
    // which is passed to the getaddrinfo() function
    ZeroMemory( &hints, sizeof(hints) );
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;

    wprintf(L"Calling getaddrinfow with following parameters:\n");
    wprintf(L"\tnodename = %ws\n", argv[1]);
    wprintf(L"\tservname (or port) = %ws\n\n", argv[2]);
    

//--------------------------------
// Call GetAddrinfoW(). If the call succeeds,
// the result variable will hold a linked list
// of addrinfow structures containing response
// information
    dwRetval = GetAddrInfoW(argv[1], argv[2], &hints, &result);
    if ( dwRetval != 0 ) {
        wprintf(L"GetAddrInfoW failed with error: %d\n", dwRetval);
        WSACleanup();
        return 1;
    }

    wprintf(L"GetAddrInfoW returned success\n");
    
    // Retrieve each address and print out the hex bytes
    for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {

        wprintf(L"GetAddrInfoW response %d\n", i++);
        wprintf(L"\tFlags: 0x%x\n", ptr->ai_flags);
        wprintf(L"\tFamily: ");
        switch (ptr->ai_family) {
            case AF_UNSPEC:
                wprintf(L"Unspecified\n");
                break;
            case AF_INET:
                wprintf(L"AF_INET (IPv4)\n");
                sockaddr_ip = (LPSOCKADDR) ptr->ai_addr;
                // The buffer length is changed by each call to WSAAddresstoString
                // So we need to set it for each iteration through the loop for safety
                ipbufferlength = 46;
                iRetval = WSAAddressToString(sockaddr_ip, (DWORD) ptr->ai_addrlen, NULL, 
                    ipstringbuffer, &ipbufferlength );
                if (iRetval)
                    wprintf(L"WSAAddressToString failed with %u\n", WSAGetLastError() );
                else    
                    wprintf(L"\tIPv4 address %ws\n", ipstringbuffer);
                break;
            case AF_INET6:
                wprintf(L"AF_INET6 (IPv6)\n");
                // the InetNtop function is available on Windows Vista and later
                // sockaddr_ipv6 = (struct sockaddr_in6 *) ptr->ai_addr;
                // printf("\tIPv6 address %s\n",
                //    InetNtop(AF_INET6, &sockaddr_ipv6->sin6_addr, ipstringbuffer, 46) );
                
                // We use WSAAddressToString since it is supported on Windows XP and later
                sockaddr_ip = (LPSOCKADDR) ptr->ai_addr;
                // The buffer length is changed by each call to WSAAddresstoString
                // So we need to set it for each iteration through the loop for safety
                ipbufferlength = 46;
                iRetval = WSAAddressToString(sockaddr_ip, (DWORD) ptr->ai_addrlen, NULL, 
                    ipstringbuffer, &ipbufferlength );
                if (iRetval)
                    wprintf(L"WSAAddressToString failed with %u\n", WSAGetLastError() );
                else    
                    wprintf(L"\tIPv6 address %ws\n", ipstringbuffer);
                break;
            default:
                wprintf(L"Other %ld\n", ptr->ai_family);
                break;
        }
        wprintf(L"\tSocket type: ");
        switch (ptr->ai_socktype) {
            case 0:
                wprintf(L"Unspecified\n");
                break;
            case SOCK_STREAM:
                wprintf(L"SOCK_STREAM (stream)\n");
                break;
            case SOCK_DGRAM:
                wprintf(L"SOCK_DGRAM (datagram) \n");
                break;
            case SOCK_RAW:
                wprintf(L"SOCK_RAW (raw) \n");
                break;
            case SOCK_RDM:
                wprintf(L"SOCK_RDM (reliable message datagram)\n");
                break;
            case SOCK_SEQPACKET:
                wprintf(L"SOCK_SEQPACKET (pseudo-stream packet)\n");
                break;
            default:
                wprintf(L"Other %ld\n", ptr->ai_socktype);
                break;
        }
        wprintf(L"\tProtocol: ");
        switch (ptr->ai_protocol) {
            case 0:
                wprintf(L"Unspecified\n");
                break;
            case IPPROTO_TCP:
                wprintf(L"IPPROTO_TCP (TCP)\n");
                break;
            case IPPROTO_UDP:
                wprintf(L"IPPROTO_UDP (UDP) \n");
                break;
            default:
                wprintf(L"Other %ld\n", ptr->ai_protocol);
                break;
        }
        wprintf(L"\tLength of this sockaddr: %d\n", ptr->ai_addrlen);
        wprintf(L"\tCanonical name: %s\n", ptr->ai_canonname);
    }

    FreeAddrInfoW(result);
    WSACleanup();

    return 0;
}

Nota Assicurarsi che l'ambiente di sviluppo sia destinato rispettivamente alla versione più recente di Ws2tcpip.h che include definizioni di struttura e funzione per addrinfoW e GetAddrInfoW.
 

nomi di dominio internazionalizzati

I nomi host Internet in genere sono costituiti da un set di caratteri molto limitato:
  • Lettere ASCII maiuscole e minuscole dell'alfabeto inglese.
  • Cifre da 0 a 9.
  • Caratteri trattini ASCII.

Con la crescita di Internet, c'è una crescente necessità di identificare i nomi host Internet per altre lingue non rappresentate dal set di caratteri ASCII. Gli identificatori che facilitano questa esigenza e consentono la rappresentazione di caratteri non ASCII (Unicode) come stringhe di caratteri ASCII speciali sono noti come nomi di dominio internazionalizzati (IDN). Un meccanismo denominato Internationalizing Domain Names in Applications (IDNA) viene usato per gestire gli IDN in modo standard. Le specifiche per IDN e IDNA sono documentate in RFC 3490, RTF 5890e RFC 6365 pubblicato da Internet Engineering Task Force (IETF).

In Windows 8 e Windows Server 2012, la funzione GetAddrInfoW fornisce il supporto per l'analisi IDN (Internationalized Domain Name) applicata al nome passato nel parametro pNodeName. Winsock esegue la codifica e la conversione punycode/IDN. Questo comportamento può essere disabilitato usando il flag AI_DISABLE_IDN_ENCODING illustrato di seguito.

In Windows 7 e Windows Server 2008 R2 o versioni precedenti, la funzione GetAddrInfoW non fornisce attualmente il supporto per l'analisi IDN applicata al nome passato nel parametro pNodeName. Winsock non esegue alcuna conversione Punycode/IDN. La funzione GetAddrInfoW non usa Punycode per convertire un IDN in base RFC 3490. La funzione GetAddrInfoW durante l'esecuzione di query DNS codifica il nome Unicode in formato UTF-8, il formato usato dai server DNS Microsoft in un ambiente aziendale.

Diverse funzioni in Windows Vista e versioni successive supportano la conversione tra etichette Unicode in un IDN ai relativi equivalenti ASCII. La rappresentazione risultante di ogni etichetta Unicode contiene solo caratteri ASCII e inizia con il prefisso xn-- se l'etichetta Unicode contiene caratteri non ASCII. Il motivo è supportare i server DNS esistenti su Internet, poiché alcuni strumenti e server DNS supportano solo caratteri ASCII (vedere RFC 3490).

La funzione IdnToAscii usa Punycode per convertire un IDN nella rappresentazione ASCII della stringa Unicode originale usando l'algoritmo standard definito in RFC 3490. La funzione IdnToUnicode converte il formato ASCII di un IDN nella normale sintassi di codifica UTF-16 Unicode. Per altre informazioni e collegamenti agli standard di bozza correlati, vedere Handling Internationalized Domain Names (IDN).

La funzione IdnToAscii può essere usata per convertire un nome IDN nel formato ASCII. Per passare questo modulo ASCII alla funzione di GetAddrInfoW , è possibile utilizzare la funzione MultiByteToWideChar per convertire la stringa CHAR in una stringa WCHAR che può quindi essere passata nel parametro pNodeName alla funzione GetAddrInfoW.

Uso di ai_flags nel parametro hints

Flag nel membro ai_flags della struttura addrinfoW facoltativa fornita nella parametro modificare il comportamento della funzione.

Questi bit di flag sono definiti nel file di intestazione Ws2def.h nel Microsoft Windows Software Development Kit (SDK) per Windows 7. Questi bit di flag sono definiti nel file di intestazione Ws2tcpip.h in Windows SDK per Windows Server 2008 e Windows Vista. Questi bit di flag sono definiti nel file di intestazione Ws2tcpip.h nel file di intestazione Platform Software Development Kit (SDK) per Windows Server 2003 e Windows XP.

I bit di flag possono essere una combinazione dei seguenti elementi:

Flag Bits Descrizione
AI_PASSIVE L'impostazione del flag AI_PASSIVE indica che il chiamante intende utilizzare la struttura di indirizzi socket restituita in una chiamata alla funzione di associazione . Quando il flag AI_PASSIVE è impostato e pNodeName è un puntatore NULL NULL, la parte dell'indirizzo IP della struttura di indirizzi socket è impostata su INADDR_ANY per gli indirizzi IPv4 e IN6ADDR_ANY_INIT per gli indirizzi IPv6.

Quando il flag di AI_PASSIVE non è impostato, la struttura di indirizzi socket restituita è pronta per una chiamata alla funzione connect per un protocollo orientato alla connessione oppure pronta per una chiamata al connettersi, sendtoo inviare funzioni di per un protocollo senza connessione. Se il parametro pNodeName è un puntatore NULL in questo caso, la parte dell'indirizzo IP della struttura di indirizzi socket viene impostata sull'indirizzo loopback.

AI_CANONNAME Se non vengono usati né AI_CANONNAMEAI_NUMERICHOST, la funzione GetAddrInfoW tenta di risolvere. Se viene passata una stringa letterale getAddrInfoW tenta di convertire la stringa e se un nome host viene passato alla funzione GetAddrInfoW tenta di risolvere il nome in un indirizzo o più indirizzi.

Quando il bit AI_CANONNAME è impostato, il parametro pNodeName non può essere NULL. In caso contrario, la funzione GetAddrInfoEx avrà esito negativo con WSANO_RECOVERY.

Quando il bit AI_CANONNAME viene impostato e la funzione GetAddrInfoW restituisce esito positivo, il membro ai_canonname nel parametro ppResult punta a una stringa NULL-terminate contenente il nome canonico del nodo specificato.

Nota La funzione GetAddrInfoW può restituire l'esito positivo quando è impostato il flag AI_CANONNAME, ma il membro ai_canonname nella struttura addrinfoW associata è NULL. Pertanto, l'uso consigliato del flag di AI_CANONNAME include il test se il membro ai_canonname nella struttura addrinfoW associata è NULL.
 
AI_NUMERICHOST Quando il bit AI_NUMERICHOST è impostato, il parametro pNodeName deve contenere un valore nullnull stringa di indirizzo host numerico; in caso contrario, viene restituito l'errore EAI_NONAME. Questo flag impedisce la chiamata di un servizio di risoluzione dei nomi.
AI_NUMERICSERV Quando il bit di AI_NUMERICSERV è impostato, il parametro pServiceName deve contenere un numero di porta nonNULL numerico; in caso contrario, viene restituito l'errore EAI_NONAME. Questo flag impedisce la chiamata di un servizio di risoluzione dei nomi.

Il flag AI_NUMERICSERV è definito in Windows SDK per Windows Vista e versioni successive. Il flag AI_NUMERICSERV non è supportato dai provider Microsoft.

AI_ALL Se il bit AI_ALL è impostato, viene effettuata una richiesta per gli indirizzi IPv6 e gli indirizzi IPv4 con AI_V4MAPPED.

Il flag AI_ALL è definito in Windows SDK per Windows Vista e versioni successive. Il flag AI_ALL è supportato in Windows Vista e versioni successive.

AI_ADDRCONFIG Se il bit AI_ADDRCONFIG è impostato, GetAddrInfoW verrà risolto solo se è configurato un indirizzo globale. Se si specifica AI_ADDRCONFIG flag, gli indirizzi IPv4 verranno restituiti solo se nel sistema locale è configurato un indirizzo IPv4 e gli indirizzi IPv6 verranno restituiti solo se nel sistema locale è configurato un indirizzo IPv6. L'indirizzo di loopback IPv4 o IPv6 non è considerato un indirizzo globale valido.

Il flag AI_ADDRCONFIG è definito in Windows SDK per Windows Vista e versioni successive. Il flag AI_ADDRCONFIG è supportato in Windows Vista e versioni successive.

AI_V4MAPPED Se il bit di AI_V4MAPPED è impostato e una richiesta per gli indirizzi IPv6 ha esito negativo, viene effettuata una richiesta di servizio dei nomi per gli indirizzi IPv4 e questi indirizzi vengono convertiti in formato indirizzo IPv4 mappato a IPv6.

Il flag AI_V4MAPPED è definito in Windows SDK per Windows Vista e versioni successive. Il flag AI_V4MAPPED è supportato in Windows Vista e versioni successive.

AI_NON_AUTHORITATIVE Se il bit AI_NON_AUTHORITATIVE è impostato, il provider dello spazio dei nomi NS_EMAIL restituisce risultati autorevoli e non autorevoli. Se il bit AI_NON_AUTHORITATIVE non è impostato, il provider dello spazio dei nomi NS_EMAIL restituisce solo risultati autorevoli.

Il flag AI_NON_AUTHORITATIVE viene definito in Windows SDK per Windows Vista e versioni successive. Il flag AI_NON_AUTHORITATIVE è supportato in Windows Vista e versioni successive e si applica solo allo spazio dei nomi NS_EMAIL.

AI_SECURE Se il bit AI_SECURE è impostato, il provider dello spazio dei nomi NS_EMAIL restituirà i risultati ottenuti con sicurezza avanzata per ridurre al minimo i possibili spoofing.

Il flag AI_SECURE è definito in Windows SDK per Windows Vista e versioni successive. Il flag AI_SECURE è supportato in Windows Vista e versioni successive e si applica solo allo spazio dei nomi NS_EMAIL.

AI_RETURN_PREFERRED_NAMES Se la AI_RETURN_PREFERRED_NAMES è impostata, non è necessario specificare alcun nome nel parametro pNodeName. Il provider dello spazio dei nomi NS_EMAIL restituirà i nomi preferiti per la pubblicazione.

Il flag AI_RETURN_PREFERRED_NAMES è definito in Windows SDK per Windows Vista e versioni successive. Il flag AI_RETURN_PREFERRED_NAMES è supportato in Windows Vista e versioni successive e si applica solo allo spazio dei nomi NS_EMAIL.

AI_FQDN Se il AI_FQDN è impostato e viene specificato un nome flat (etichetta singola), GetAddrInfoW restituirà il nome di dominio completo in cui il nome verrà risolto. Il nome di dominio completo viene restituito nel membro ai_canonname nella struttura addrinfoW associata . Si tratta di un flag di bit diverso da AI_CANONNAME che restituisce il nome canonico registrato in DNS, che può essere diverso dal nome di dominio completo in cui è stato risolto il nome flat. È possibile impostare solo uno dei bit di AI_FQDN e AI_CANONNAME. La funzione GetAddrInfoW avrà esito negativo se entrambi i flag sono presenti con EAI_BADFLAGS.

Quando il bit di AI_FQDN è impostato, il parametro pNodeName non può essere NULL. In caso contrario, la funzione GetAddrInfoEx avrà esito negativo con WSANO_RECOVERY.

Windows 7: Il flag AI_FQDN è definito in Windows SDK per Windows 7 e versioni successive. Il flag AI_FQDN è supportato in Windows 7 e versioni successive.

AI_FILESERVER Se la AI_FILESERVER è impostata, si tratta di un suggerimento per il provider dello spazio dei nomi su cui viene eseguita la query sul nome host nello scenario di condivisione file. Il provider dello spazio dei nomi può ignorare questo hint.

Windows 7: Il flag AI_FILESERVER è definito in Windows SDK per Windows 7 e versioni successive. Il flag AI_FILESERVER è supportato in Windows 7 e versioni successive.

AI_DISABLE_IDN_ENCODING Se la AI_DISABLE_IDN_ENCODING è impostata, questa opzione disabilita la codifica automatica del nome di dominio internazionale usando Punycode nelle funzioni di risoluzione dei nomi chiamate dalla funzione di GetAddrInfoW.

Windows 8: Il flag AI_DISABLE_IDN_ENCODING è definito in Windows SDK per Windows 8 e versioni successive. Il flag AI_DISABLE_IDN_ENCODING è supportato in Windows 8 e versioni successive.

 

windows 8.1 e Windows Server 2012 R2: questa funzione è supportata per le app di Windows Store in Windows 8.1, Windows Server 2012 R2 e versioni successive.

Nota

L'intestazione ws2tcpip.h definisce GetAddrInfo come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows XP, Windows 8.1 [app desktop | App UWP]
server minimo supportato Windows Server 2003 [app desktop | App UWP]
piattaforma di destinazione Finestre
intestazione ws2tcpip.h
libreria Ws2_32.lib
dll Ws2_32.dll

Vedere anche

FreeAddrInfoW

GetAddrInfoEx

GetHostNameW

IdnToAscii

IdnToUnicode

WSAGetLastError

WSASocket

Funzioni Winsock

di riferimento winsock

addrinfo

addrinfoW

addrinfoex

addrinfoex2

binding

connettere

gai_strerror

getaddrinfo

inviare

sendto

socket