Zusammenfassung der Namensauflösungsfunktionen
Die Namensauflösungsfunktionen können in drei Kategorien unterteilt werden: Dienstinstallation, Clientabfragen und Hilfsfunktion (mit Makros). In den folgenden Abschnitten werden die Funktionen in den einzelnen Kategorien identifiziert und deren 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 ein Dienstklassenname, eine GUID für den Dienstklassenbezeichner und eine Reihe von WSANSCLASSINFO-Strukturen bereitgestellt wird. Diese Strukturen sind jeweils spezifisch für einen bestimmten Namespace und geben allgemeine Werte wie empfohlene TCP-Portnummern oder NetWare-SAP-Bezeichner an. Eine Dienstklasse kann entfernt werden, indem WSARemoveServiceClass aufruft und die GUID angegeben wird, die dem Klassenbezeichner entspricht.
Sobald eine Dienstklasse vorhanden ist, können bestimmte Instanzen eines Diensts über WSASetServiceinstalliert oder entfernt werden. Diese Funktion akzeptiert 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 zur Verfügung, einschließlich Dienstklassenbezeichner, Dienstname (für diese Instanz), anwendbarer Namespacebezeichner und Protokollinformationen sowie einer Reihe von Transportadressen, an denen der Dienst lauset. Dienste sollten WSASetService aufrufen, wenn sie initialisieren, um ihr Vorhandensein in dynamischen Namespaces anzugreifen.
Clientabfrage
Mit der WSAEnumNameSpaceProviders-Funktion kann eine Anwendung feststellen, auf welche Namespaces über Winsock-Namensauflösungsfunktionen zugegriffen werden kann. Außerdem kann eine Anwendung bestimmen, ob ein bestimmter Namespace von mehr als einem Namespaceanbieter 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-Namespaceabfragevorgänge umfassen eine Reihe von Aufrufen: WSALookupServiceBegin,gefolgt von mindestens einem Aufruf von WSALookupServiceNext, der mit einem Aufruf von WSALookupServiceEndendet. 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 bieten. Sie gibt ein Abfragehandler zurück, das in den nachfolgenden Aufrufen von WSALookupServiceNext und WSALookupServiceEnd verwendet wird.
Die Anwendung ruft WSALookupServiceNext auf, um Abfrageergebnisse mit Ergebnissen zu erhalten, 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 einen derzeit ausstehenden WSALookupServiceNext abzubrechen, wenn er 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 bleibt _ _ erhalten. Für Windows Sockets 2 sollten Anwendungen jedoch sowohl WSAENOMORE als auch WSA E NO MORE auf die bestmögliche Kompatibilität mit Namespaceanbietern überprüfen, die eines der beiden _ _ _ Verwenden.
Hilfsfunktionen
Zu den Hilfsfunktionen für die Namensauflösung gehören eine Funktion zum Abrufen eines Dienstklassennamens mit einem Dienstklassenbezeichner, ein Paar von Funktionen zum Übersetzen einer Transportadresse zwischen einer SOCKADDR-Struktur und einer ASCII-Zeichenfolgendarstellung, eine Funktion zum Abrufen der Schemainformationen der Dienstklasse für eine bestimmte Dienstklasse und ein Satz von Makros zum Zuordnen bekannter Dienste zu vorab zugewiesenen GUIDs.
Die folgenden Makros von Winsock2.h helfen bei der 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 Host reihenfolge) 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 Host reihenfolge sein). |
| PORT _ VON _ SVCID _ TCP(GUID)PORT _ VON _ SVCID _ UDP(GUID) SAPID _ FROM _ SVCID _ NETWARE(GUID) |
Gibt den Port oder Objekttyp zurück, der der GUID (Portnummer in Host reihenfolge) zugeordnet ist. |