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 client et assistance (avec 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
Lorsque la classe de service requise n’existe pas déjà, une application utilise WSAInstallServiceClass 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 chacune spécifiques à un espace de noms particulier et fournissent des valeurs communes telles que les numéros de port TCP recommandés ou les identificateurs SAP NetWare. 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 comme 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 de suppression. 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), l’identificateur d’espace de noms et les informations de protocole applicables, ainsi qu’un ensemble d’adresses de transport à l’écoute du service. Les services doivent appeler WSASetService lorsqu’ils s’initialisent pour publier leur présence dans les espaces de noms dynamiques.
Requête cliente
La fonction WSAEnumNameSpaceProviders permet à une application de découvrir quels espaces de noms sont accessibles via les fonctionnalités 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 d’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 d’espace de noms Winsock impliquent une série d’appels : WSALookupServiceBegin, suivis 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 qui est 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 WSAQUERYSET 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 terminée par un appel à WSALookupServiceEnd. La fonction WSALookupServiceEnd peut également être utilisée pour annuler un WSALookupServiceNext en attente lorsqu’il est appelé à partir d’un autre thread.
Dans Windows Sockets 2, des 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 case activée pour WSAENOMORE et WSA_E_NO_MORE pour la compatibilité la plus large possible avec les fournisseurs d’espaces de noms qui utilisent l’un ou l’autre.
Fonctions d’assistance
Les fonctions d’assistance à la 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 et une représentation sous forme de chaîne ASCII, une fonction pour 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 le mappage de services connus à des GUID préalloués.
Les macros suivantes de Winsock2.h facilitent le mappage 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 l’équivalent guid d’un numéro de port TCP ou UDP (le numéro de port doit être dans l’ordre de l’hôte). |
PORT_FROM_SVCID_TCP(GUID)PORT_FROM_SVCID_UDP(GUID) SAPID_FROM_SVCID_NETWARE(GUID) |
Retourne le type de port ou d’objet associé au GUID (numéro de port dans l’ordre de l’hôte). |
Rubriques connexes