Partager via


Résumé des fonctions de résolution de noms

Les fonctions de résolution de noms peuvent être regroupées en trois catégories : installation du service, requêtes clientes et assistance (avec des macros). Les sections qui suivent identifient les fonctions de chaque catégorie et décrivent brièvement leur utilisation prévue. Les structures de données clés sont également décrites.

Service Installation

Quand la classe de service requise n’existe pas encore, une application utilise WSAInstallServiceClassclass pour installer une nouvelle classe de service en fournissant un nom de classe de service, un GUID pour l’identificateur de classe de service et une série de structures WSANSCLASSINFO. Ces structures sont spécifiques à un espace de noms particulier et fournissent des valeurs courantes telles que les numéros de port TCP recommandés ou les identificateurs SAP NetWare recommandés. Une classe de service peut être supprimée en appelant WSARemoveServiceClass et en fournissant le GUID correspondant à l’identificateur de classe.

Une fois qu’une classe de service existe, des instances spécifiques d’un service peuvent être installées ou supprimées via WSASetService. Cette fonction prend une structure WSAQUERYSET en tant que paramètre d’entrée, ainsi qu’un code d’opération et des indicateurs d’opération. Le code d’opération indique si le service est en cours d’installation ou supprimé. La structure WSAQUERYSET fournit toutes les informations pertinentes sur le service, notamment l’identificateur de classe de service, le nom du service (pour cette instance), les informations d’identificateur d’espace de noms et de protocole applicables, ainsi qu’un ensemble d’adresses de transport à laquelle le service écoute. Les services doivent appeler WSASetService lorsqu’ils initialisent pour publier leur présence dans des espaces de noms dynamiques.

Requête cliente

La fonction WSAEnumNameSpaceProviders permet à une application de découvrir quels espaces de noms sont accessibles via les installations de résolution de noms Winsock. Elle permet également à une application de déterminer si un espace de noms donné est pris en charge par plusieurs fournisseurs d’espaces de noms et de découvrir l’identificateur du fournisseur pour un fournisseur d’espaces de noms particulier. À l’aide d’un identificateur de fournisseur, l’application peut restreindre une opération de requête à un fournisseur d’espaces de noms spécifié.

Les opérations de requête de l’espace de noms Winsock impliquent une série d’appels : WSALookupServiceBegin, suivie d’un ou de plusieurs appels à WSALookupServiceNext et se terminant par un appel à WSALookupServiceEnd. WSALookupServiceBegin prend une structure WSAQUERYSET comme entrée pour définir les paramètres de requête, ainsi qu’un ensemble d’indicateurs pour fournir un contrôle supplémentaire sur l’opération de recherche. Elle retourne un handle de requête utilisé dans les appels suivants à WSALookupServiceNext et WSALookupServiceEnd.

L’application appelle WSALookupServiceNext pour obtenir les résultats de la requête, avec les résultats fournis dans une mémoire tampon WSAQUERY SET fournie par l’application. L’application continue d’appeler WSALookupServiceNext jusqu’à ce que le code d’erreur WSA_E_NO_MORE soit retourné indiquant que tous les résultats ont été récupérés. La recherche est ensuite arrêtée par un appel à WSALookupServiceEnd. La fonction WSALookupServiceEnd peut également être utilisée pour annuler une WSALookupServiceNext en attente lorsqu’elle est appelée à partir d’un autre thread.

Dans Windows Sockets 2, les codes d’erreur en conflit sont définis pour WSAENOMORE (10102) et WSA_E_NO_MORE (10110). Le code d’erreur WSAENOMORE sera supprimé dans une version ultérieure et seul WSA_E_NO_MORE restera. Toutefois, pour Windows Sockets 2, les applications doivent rechercher WSAENOMORE et WSA_E_NO_MORE pour obtenir la compatibilité la plus large possible avec les fournisseurs d’espaces de noms qui utilisent l’une ou l’autre.

Fonctions d’assistance

Les fonctions d’assistance de résolution de noms incluent une fonction permettant de récupérer un nom de classe de service en fonction d’un identificateur de classe de service, une paire de fonctions utilisées pour traduire une adresse de transport entre une structure SOCKADDR structure et une représentation sous forme de chaîne ASCII, une fonction permettant de récupérer les informations de schéma de classe de service pour une classe de service donnée, et un ensemble de macros pour mapper les services connus aux GUID préalloués.

Les macros suivantes de Winsock2.h aident à mapper entre les classes de service connues et ces espaces de noms :

Macro Description
SVCID_TCP(Port) SVCID_UDP(Port)
SVCID_NETWARE(Type d’objet)
Étant donné un port pour TCP/IP ou UDP/IP ou le type d’objet dans le cas de NetWare, retourne le GUID (numéro de port dans l’ordre de l’hôte).
IS_SVCID_TCP(GUID)IS_SVCID_UDP(GUID)
IS_SVCID_NETWARE(GUID)
Retourne TRUE si le GUID se trouve dans la plage autorisée.
SET_TCP_SVCID(GUID, port)SET_UDP_SVCID(GUID, port)
Initialise une structure GUID avec le GUID équivalent pour un numéro de port TCP ou UDP (le numéro de port doit être dans l’ordre hôte).
PORT_FROM_SVCID_TCP(GUID)PORT_FROM_SVCID_UDP(GUID)
SAPID_FROM_SVCID_NETWARE(GUID)
Retourne le port ou le type d’objet associé au GUID (numéro de port dans l’ordre de l’hôte).

 

getaddrinfo

GetAddrInfoEx

getAddrInfoW

getnameinfo

GetNameInfoW

structures de données de résolution de noms

modèle de résolution de noms

Protocol-Independent résolution de noms

d’inscription et de résolution de noms

SOCKADDR

WSAEnumNameSpaceProviders

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNext

WSARemoveServiceClass

WSASetService

WSAQUERYSET

WSANSCLASSINFO