NDKPI-Listener, Connectors und Endpunkte
Ein NDK-Consumer stellt eine Verbindung mit einem NDK-Connector her, indem er die Funktion NdkConnect (NDK_FN_CONNECT) oder NdkConnectWithSharedEndpoint (NDK_FN_CONNECT_WITH_SHARED_ENDPOINT) aufruft.
Jeder Connector, der sich in einem verbundenen Zustand befindet, verfügt außerdem über einen zugrunde liegenden Endpunkt, der das lokale Ende der eingerichteten NDK-Verbindung darstellt:
- Ein Connector, der durch Akzeptieren einer eingehenden Verbindung über einen NDK-Listener eingerichtet wird, erbt automatisch den impliziten Endpunkt des Listeners als lokalen impliziten Endpunkt.
- Ein Connector, der über die NdkConnect-Funktion verbunden ist, verfügt über einen eigenen dedizierten impliziten lokalen Endpunkt.
- Ein Connector, der über die NdkConnectWithSharedEndpoint-Funktion verbunden ist, verfügt über einen expliziten lokalen Endpunkt, der für andere Connectors freigegeben werden kann, die auch über die NdkConnectWithSharedEndpoint-Funktion verbunden sind.
Der NDK-Anbieter muss eine Art Verweisanzahl für jeden impliziten oder expliziten Endpunkt beibehalten und den Endpunkt freigeben (d. h. die Adresse/den Port als verfügbar markieren, um erneut verwendet zu werden), wenn die Verweisanzahl 00 erreicht:
Referenzzählung für (nicht freigegebene) Endpunkte
Wenn der Consumer die Funktion NdkListen (NDK_FN_LISTEN) aufruft, erstellt der Anbieter einen impliziten Endpunkt. Für diesen impliziten Endpunkt muss der Anbieter eine Verweisanzahl wie folgt beibehalten:
Fügen Sie der Verweisanzahl des Endpunkts einen Verweis für den Listener selbst hinzu.
Fügen Sie einen Verweis für jeden Connector hinzu, der über diesen Listener akzeptiert wird.
Entfernen Sie einen Verweis, wenn ein Connector geschlossen wird, der zuvor über den Listener akzeptiert wurde.
Entfernen Sie einen Verweis, wenn der Listener selbst geschlossen ist. Hinweis Sie können den Listener erst schließen, wenn alle Connectors geschlossen sind.
Geben Sie den Endpunkt frei, wenn seine Verweisanzahl auf 0 zurückgesetzt wird. (Dies ist nur der Fall, wenn der Listener und alle über den Listener akzeptierten Connectors geschlossen wurden.)
Das einfache Schließen des Listeners gibt den Endpunkt nicht frei, solange es zuvor akzeptierte Connectors gibt, die noch nicht geschlossen sind. Dies bedeutet, dass neue NdkListen-, NdkConnect- und NdkConnectWithSharedEndpoint-Anforderungen für dieselbe lokale Adresse und denselben Port fehlschlagen, bis alle diese Verbindungen geschlossen werden. Beachten Sie, dass die Close-Anforderung für den Listener auch ausstehend bleibt, bis alle derartigen Verbindungen geschlossen werden (aufgrund der in NDKPI-Objektlebensdaueranforderungen beschriebenen Vor-/Nachfolgerregeln). Der Anbieter muss weitere eingehende Verbindungen auf dem Listener ablehnen, sobald eine schließende Anforderung ausgestellt wird (damit keine neuen Verbindungen akzeptiert werden, während die Close-Anforderung aussteht).
Referenzzählung für Connectors
Wenn der Consumer NdkConnect aufruft, erstellt der Anbieter einen impliziten Endpunkt. Für diesen impliziten Endpunkt muss der Anbieter Folgendes ausführen:
- Fügen Sie einen Verweis durch den Connector hinzu. Es gibt nur einen Connector, daher nur eine Referenz.
- Entfernen Sie den Verweis des Connectors auf den Endpunkt, wenn der Connector geschlossen wird.
- Geben Sie den Endpunkt frei, wenn dieser Verweis nicht mehr vorhanden ist.
Referenzzählung für freigegebene Endpunkte
Wenn der Consumer NdkConnectWithSharedEndpoint aufruft, erstellt der Anbieter einen expliziten freigegebenen Endpunkt. Für diesen expliziten freigegebenen Endpunkt muss der Anbieter Folgendes ausführen:
- Fügen Sie der Verweisanzahl des freigegebenen Endpunkts einen Verweis für den freigegebenen Endpunkt selbst hinzu.
- Fügen Sie einen Verweis für jeden Connector hinzu, der über diesen freigegebenen Endpunkt verbunden ist.
- Entfernen Sie einen Verweis, wenn ein Connector geschlossen wird, der zuvor über den freigegebenen Endpunkt verbunden war.
- Geben Sie den Endpunkt frei, der für die Verweisanzahl auf 0 zurückgesetzt wird. (Dies ist der Fall, wenn der freigegebene Endpunkt und alle über den freigegebenen Endpunkt verbundenen Connectors geschlossen wurden.)
- Das einfache Schließen des freigegebenen Endpunkts gibt den Endpunkt nicht frei, solange zuvor verbundene Connectors vorhanden sind, die noch nicht geschlossen sind. Dies bedeutet, dass neue NdkListen-, NdkConnect- und NdkConnectWithSharedEndpoint-Anforderungen für dieselbe lokale Adresse und denselben Port fehlschlagen, bis alle diese Verbindungen geschlossen werden. Beachten Sie, dass die schließende Anforderung für den freigegebenen Endpunkt auch ausstehend bleibt, bis alle derartigen Verbindungen geschlossen werden (aufgrund der in NDKPI-Objektlebensdaueranforderungen beschriebenen Vor-/Nachfolgerregeln).