Zusammenfassung der Namensauflösungsfunktionen

Die Namensauflösungsfunktionen können in drei Kategorien gruppiert werden: Dienstinstallation, Clientabfragen und Hilfsprogramm (mit Makros). In den folgenden Abschnitten werden die Funktionen in jeder Kategorie identifiziert und die beabsichtigte Verwendung kurz beschrieben. Wichtige Datenstrukturen werden ebenfalls beschrieben.

Dienstinstallation

Wenn die erforderliche Dienstklasse noch nicht vorhanden ist, verwendet eine Anwendung WSAInstallServiceClass , um eine neue Dienstklasse zu installieren, indem sie einen Dienstklassennamen, eine GUID für den Dienstklassenbezeichner und eine Reihe von WSANSCLASSINFO-Strukturen angibt. Diese Strukturen sind jeweils spezifisch für einen bestimmten Namespace und stellen allgemeine Werte bereit, z. B. empfohlene TCP-Portnummern oder NetWare-SAP-Bezeichner. Eine Dienstklasse kann entfernt werden, indem WSARemoveServiceClass aufgerufen und die GUID angegeben wird, die dem Klassenbezeichner entspricht.

Sobald eine Dienstklasse vorhanden ist, können bestimmte Instanzen eines Diensts über WSASetService installiert oder entfernt werden. Diese Funktion verwendet eine WSAQUERYSET-Struktur als Eingabeparameter zusammen mit einem Vorgangscode und Vorgangsflags. Der Vorgangscode gibt an, ob der Dienst installiert oder entfernt wird. Die WSAQUERYSET-Struktur stellt alle relevanten Informationen zum Dienst bereit, einschließlich Dienstklassenbezeichner, Dienstname (für diese instance), zutreffender Namespacebezeichner und Protokollinformationen sowie eine Reihe von Transportadressen, an denen der Dienst lauscht. Dienste sollten WSASetService aufrufen, wenn sie initialisieren, um ihre Anwesenheit in dynamischen Namespaces anzukündigen.

Clientabfrage

Mit der WSAEnumNameSpaceProviders-Funktion kann eine Anwendung ermitteln, auf welche Namespaces über Winsock-Namensauflösungsfunktionen zugegriffen werden kann. Außerdem kann eine Anwendung bestimmen, ob ein bestimmter Namespace von mehreren Namespaceanbietern unterstützt wird, und den Anbieterbezeichner für einen bestimmten Namespaceanbieter ermitteln. Mithilfe eines Anbieterbezeichners kann die Anwendung einen Abfragevorgang auf einen angegebenen Namespaceanbieter beschränken.

Winsock-Namespace-Abfragevorgänge umfassen eine Reihe von Aufrufen: WSALookupServiceBegin, gefolgt von einem oder mehreren Aufrufen von WSALookupServiceNext und enden mit einem Aufruf von WSALookupServiceEnd. WSALookupServiceBegin verwendet eine WSAQUERYSET-Struktur als Eingabe, um die Abfrageparameter zusammen mit einem Satz von Flags zu definieren, um zusätzliche Kontrolle über den Suchvorgang zu ermöglichen. Sie gibt ein Abfragehandle zurück, das in den nachfolgenden Aufrufen von WSALookupServiceNext und WSALookupServiceEnd verwendet wird.

Die Anwendung ruft WSALookupServiceNext auf, um Abfrageergebnisse mit Ergebnissen abzurufen, die in einem von der Anwendung bereitgestellten WSAQUERYSET-Puffer bereitgestellt werden. Die Anwendung ruft weiterhin WSALookupServiceNext auf, bis der Fehlercode WSA_E_NO_MORE zurückgegeben wird, der angibt, dass alle Ergebnisse abgerufen wurden. Die Suche wird dann durch einen Aufruf von WSALookupServiceEnd beendet. Die WSALookupServiceEnd-Funktion kann auch verwendet werden, um eine derzeit ausstehende WSALookupServiceNext-Datei abzubrechen, wenn sie von einem anderen Thread aufgerufen wird.

In Windows Sockets 2 werden in Konflikt stehende Fehlercodes für WSAENOMORE (10102) und WSA_E_NO_MORE (10110) definiert. Der Fehlercode WSAENOMORE wird in einer zukünftigen Version entfernt und nur WSA_E_NO_MORE verbleiben. Für Windows Sockets 2 sollten Anwendungen jedoch sowohl auf WSAENOMORE als auch auf WSA_E_NO_MORE überprüfen, ob die größtmögliche Kompatibilität mit Namespaceanbietern möglich ist, die beide verwenden.

Hilfsfunktionen

Zu den Hilfsfunktionen für die Namensauflösung gehören eine Funktion zum Abrufen eines Dienstklassennamens mit einem Dienstklassenbezeichner, ein Funktionspaar, das zum Übersetzen einer Transportadresse zwischen einer SOCKADDR-Struktur und einer ASCII-Zeichenfolgendarstellung verwendet wird, eine Funktion zum Abrufen der Dienstklassenschemainformationen für eine bestimmte Dienstklasse und eine Reihe von Makros zum Zuordnen bekannter Dienste zu vorab zugewiesenen GUIDs.

Die folgenden Makros aus Winsock2.h unterstützen die Zuordnung zwischen bekannten Dienstklassen und diesen Namespaces:

Makro Beschreibung
SVCID_TCP(Port) SVCID_UDP(Port)
SVCID_NETWARE(Objekttyp)
Bei einem Port für TCP/IP oder UDP/IP oder dem Objekttyp im Fall von NetWare gibt die GUID (Portnummer in Hostreihenfolge) zurück.
IS_SVCID_TCP(GUID)IS_SVCID_UDP(GUID)
IS_SVCID_NETWARE(GUID)
Gibt TRUE zurück, wenn die GUID innerhalb des zulässigen Bereichs liegt.
SET_TCP_SVCID(GUID, Port)SET_UDP_SVCID(GUID, Port)
Initialisiert eine GUID-Struktur mit der GUID-Entsprechung für eine TCP- oder UDP-Portnummer (Portnummer muss in Hostreihenfolge sein).
PORT_FROM_SVCID_TCP(GUID)PORT_FROM_SVCID_UDP(GUID)
SAPID_FROM_SVCID_NETWARE (GUID)
Gibt den Port- oder Objekttyp zurück, der der GUID zugeordnet ist (Portnummer in Hostreihenfolge).

 

getaddrinfo

GetAddrInfoEx

GetAddrInfoW

getnameinfo

GetNameInfoW

Namensauflösungsdatenstrukturen

Namensauflösungsmodell

Protokollunabhängige Namensauflösung

Registrierung und Namensauflösung

SOCKADDR

WSAEnumNameSpaceProviders

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNext

WSARemoveServiceClass

WSASetService

WSAQUERYSET

WSANSCLASSINFO