Agentes de escucha, conectores y puntos de conexión de NDKPI
Un consumidor de NDK conecta un conector NDK llamando a la función NdkConnect (NDK_FN_CONNECT) o NdkConnectWithSharedEndpoint (NDK_FN_CONNECT_WITH_SHARED_ENDPOINT).
Cada conector que se encuentra en un estado conectado también tiene un punto de conexión subyacente que representa el final local de la conexión NDK establecida:
- Un conector que se establece aceptando una conexión entrante a través de un agente de escucha de NDK hereda automáticamente el punto de conexión implícito del agente de escucha como su punto de conexión implícito local.
- Un conector que está conectado a través de la función NdkConnect tiene su propio punto de conexión local implícito dedicado.
- Un conector que está conectado a través de la función NdkConnectWithSharedEndpoint tiene un punto de conexión local explícito que se puede compartir con otros conectores que también están conectados a través de la función NdkConnectWithSharedEndpoint .
El proveedor NDK debe mantener algún tipo de recuento de referencias para cada punto de conexión implícito o explícito y liberar el punto de conexión (es decir, marcar la dirección o puerto como disponible para usarse de nuevo) cuando el recuento de referencias alcance cero:
Recuento de referencias para puntos de conexión (no compartidos)
Cuando el consumidor llama a la función NdkListen (NDK_FN_LISTEN), el proveedor crea un punto de conexión implícito. Para este punto de conexión implícito, el proveedor debe mantener un recuento de referencias de la siguiente manera:
Agregue una referencia para el propio agente de escucha al recuento de referencias del punto de conexión.
Agregue una referencia para cada conector que se acepte a través de ese agente de escucha.
Quite una referencia cuando se cierre un conector que se aceptó anteriormente sobre el agente de escucha.
Quite una referencia cuando se cierre el propio agente de escucha. Nota No se puede cerrar el agente de escucha hasta que se cierren todos los conectores.
Libere el punto de conexión cuando su recuento de referencias vuelva a cero. (Este es el caso solo cuando el agente de escucha y todos los conectores aceptados en el agente de escucha se han cerrado).
Simplemente cerrar el agente de escucha no libera el punto de conexión siempre y cuando haya conectores aceptados previamente que aún no estén cerrados. Esto significa que las nuevas solicitudes NdkListen, NdkConnect y NdkConnectWithSharedEndpoint para la misma dirección local y puerto producirán un error hasta que se cierren todas estas conexiones. Tenga en cuenta que la solicitud de cierre en el agente de escucha también permanecerá pendiente hasta que se cierren todas estas conexiones (debido a las reglas anteriores o sucesoras descritas en Requisitos de duración del objeto NDKPI). El proveedor debe rechazar más conexiones entrantes en el agente de escucha tan pronto como se emita una solicitud de cierre (para que no se acepten nuevas conexiones mientras la solicitud de cierre está pendiente).
Recuento de referencias para conectores
Cuando el consumidor llama a NdkConnect, el proveedor crea y establece el punto de conexión implícito. Para este punto de conexión implícito, el proveedor debe:
- Agregue una referencia por el conector. Solo hay un conector, por lo que solo hay una referencia.
- Quite la referencia del conector al punto de conexión cuando se cierre el conector.
- Libere el punto de conexión cuando haya desaparecido esa referencia.
Recuento de referencias para puntos de conexión compartidos
Cuando el consumidor llama a NdkConnectWithSharedEndpoint, el proveedor crea un punto de conexión compartido explícito. Para este punto de conexión compartido explícito, el proveedor debe:
- Agregue una referencia para el propio punto de conexión compartido al recuento de referencias del punto de conexión compartido.
- Agregue una referencia para cada conector conectado a través de ese punto de conexión compartido.
- Quite una referencia cuando se cierre un conector que se conectó anteriormente a través del punto de conexión compartido.
- Libere el punto de conexión en el que el recuento de referencias vuelve a cero. (Este es el caso cuando se ha cerrado el punto de conexión compartido y todos los conectores conectados a través del punto de conexión compartido).
- Simplemente cerrar el punto de conexión compartido no libera el punto de conexión siempre y cuando haya conectores conectados previamente que aún no estén cerrados. Esto significa que las nuevas solicitudes NdkListen, NdkConnect y NdkConnectWithSharedEndpoint para la misma dirección local y puerto producirán un error hasta que se cierren todas estas conexiones. Tenga en cuenta que la solicitud de cierre en el punto de conexión compartido también permanecerá pendiente hasta que se cierren todas estas conexiones (debido a las reglas anteriores o sucesoras descritas en Requisitos de duración del objeto NDKPI).