Condividi tramite


Riepilogo delle funzioni di risoluzione dei nomi

Le funzioni di risoluzione dei nomi possono essere raggruppate in tre categorie: installazione del servizio, query client e helper (con macro). Le sezioni che seguono identificano le funzioni in ogni categoria e descrivono brevemente l'uso previsto. Vengono descritte anche le strutture dei dati chiave.

Installazione del servizio

Quando la classe di servizio richiesta non esiste già, un'applicazione usa WSAInstallServiceClass per installare una nuova classe di servizio specificando un nome di classe del servizio, un GUID per l'identificatore della classe del servizio e una serie di strutture WSANSCLASSINFO . Queste strutture sono specifiche di uno spazio dei nomi specifico e forniscono valori comuni, ad esempio i numeri di porta TCP consigliati o gli identificatori SAP NetWare. È possibile rimuovere una classe di servizio chiamando WSARemoveServiceClass e specificando il GUID corrispondente all'identificatore di classe.

Dopo l'esistenza di una classe di servizio, è possibile installare o rimuovere istanze specifiche di un servizio tramite WSASetService. Questa funzione accetta una struttura WSAQUERYSET come parametro di input insieme a un codice dell'operazione e ai flag di operazione. Il codice dell'operazione indica se il servizio viene installato o rimosso. La struttura WSAQUERYSET fornisce tutte le informazioni pertinenti sul servizio, tra cui l'identificatore della classe del servizio, il nome del servizio (per questa istanza), l'identificatore dello spazio dei nomi applicabile e le informazioni sul protocollo e un set di indirizzi di trasporto in cui il servizio è in ascolto. I servizi devono richiamare WSASetService quando inizializzano per annunciare la loro presenza negli spazi dei nomi dinamici.

Client Query

La funzione WSAEnumNameSpaceProviders consente a un'applicazione di individuare gli spazi dei nomi accessibili tramite le funzionalità di risoluzione dei nomi Winsock. Consente anche a un'applicazione di determinare se uno spazio dei nomi specificato è supportato da più provider di spazi dei nomi e di individuare l'identificatore del provider per qualsiasi provider di spazi dei nomi specifico. Usando un identificatore del provider, l'applicazione può limitare un'operazione di query a un provider di spazi dei nomi specificato.

Le operazioni di query dello spazio dei nomi Winsock prevedono una serie di chiamate: WSALookupServiceBegin, seguite da una o più chiamate a WSALookupServiceNext e terminano con una chiamata a WSALookupServiceEnd. WSALookupServiceBegin accetta una struttura WSAQUERYSET come input per definire i parametri di query insieme a un set di flag per fornire un controllo aggiuntivo sull'operazione di ricerca. Restituisce un handle di query utilizzato nelle chiamate successive a WSALookupServiceNext e WSALookupServiceEnd.

L'applicazione richiama WSALookupServiceNext per ottenere i risultati della query, con i risultati forniti in un buffer WSAQUERYSET fornito dall'applicazione. L'applicazione continua a chiamare WSALookupServiceNext fino a quando non viene restituito il codice di errore WSA_E_NO_MORE che indica che tutti i risultati sono stati recuperati. La ricerca viene quindi terminata da una chiamata a WSALookupServiceEnd. La funzione WSALookupServiceEnd può essere usata anche per annullare un oggetto WSALookupServiceNext attualmente in sospeso quando viene chiamato da un altro thread.

In Windows Sockets 2 i codici di errore in conflitto sono definiti per WSAENOMORE (10102) e WSA_E_NO_MORE (10110). Il codice di errore WSAENOMORE verrà rimosso in una versione futura e rimarrà solo WSA_E_NO_MORE. Per Windows Sockets 2, tuttavia, le applicazioni devono verificare sia WSAENOMORE che WSA_E_NO_MORE per garantire la compatibilità più ampia possibile con i provider di spazi dei nomi che usano entrambi.

Funzioni di supporto

Le funzioni helper di risoluzione dei nomi includono una funzione per recuperare un nome di classe del servizio in base a un identificatore di classe del servizio, una coppia di funzioni usate per convertire un indirizzo di trasporto tra una struttura SOCKADDR e una rappresentazione di stringa ASCII, una funzione per recuperare le informazioni sullo schema della classe del servizio per una determinata classe di servizio e un set di macro per il mapping di servizi noti a GUID preallocati.

Le macro seguenti di Winsock2.h facilitano il mapping tra classi di servizio note e questi spazi dei nomi:

Macro Descrizione
SVCID_TCP(Porta) SVCID_UDP(Porta)
SVCID_NETWARE(Tipo di oggetto)
Data una porta per TCP/IP o UDP/IP o il tipo di oggetto nel caso di NetWare, restituisce il GUID (numero di porta nell'ordine host).
IS_SVCID_TCP(GUID)IS_SVCID_UDP(GUID)
IS_SVCID_NETWARE(GUID)
Restituisce TRUE se il GUID è compreso nell'intervallo consentito.
SET_TCP_SVCID(GUID, porta)SET_UDP_SVCID(GUID, porta)
Inizializza una struttura GUID con l'equivalente GUID per un numero di porta TCP o UDP (il numero di porta deve essere nell'ordine host).
PORT_FROM_SVCID_TCP(GUID)PORT_FROM_SVCID_UDP(GUID)
SAPID_FROM_SVCID_NETWARE(GUID)
Restituisce la porta o il tipo di oggetto associato al GUID (numero di porta nell'ordine host).

 

getaddrinfo

GetAddrInfoEx

GetAddrInfoW

getnameinfo

GetNameInfoW

Strutture dei dati di risoluzione dei nomi

Modello di risoluzione dei nomi

Risoluzione dei nomi indipendenti dal protocollo

Registrazione e risoluzione dei nomi

SOCKADDR

WSAEnumNameSpaceProviders

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNext

WSARemoveServiceClass

WSASetService

WSAQUERYSET

WSANSCLASSINFO