Ouvintes, conectores e pontos de extremidade do NDKPI
Um consumidor NDK conecta um conector NDK chamando a função NdkConnect (NDK_FN_CONNECT) ou NdkConnectWithSharedEndpoint (NDK_FN_CONNECT_WITH_SHARED_ENDPOINT).
Cada conector que está em um estado conectado também tem um ponto de extremidade subjacente que representa o final local da conexão NDK estabelecida:
- Um conector estabelecido aceitando uma conexão de entrada em um ouvinte NDK herda automaticamente o ponto de extremidade implícito do ouvinte como seu ponto de extremidade implícito local.
- Um conector conectado por meio da função NdkConnect tem seu próprio ponto de extremidade local implícito dedicado.
- Um conector conectado por meio da função NdkConnectWithSharedEndpoint tem um ponto de extremidade local explícito que pode ser compartilhado com outros conectores que também estão conectados por meio da função NdkConnectWithSharedEndpoint .
O provedor NDK deve manter algum tipo de contagem de referência para cada ponto de extremidade implícito ou explícito e liberar o ponto de extremidade (ou seja, marcar o endereço/porta como disponível para ser usado novamente) quando a contagem de referência atingir zero:
Contagem de referência para pontos de extremidade (não compartilhados)
Quando o consumidor chama a função NdkListen (NDK_FN_LISTEN), o provedor cria um ponto de extremidade implícito. Para esse ponto de extremidade implícito, o provedor deve manter uma contagem de referência da seguinte maneira:
Adicione uma referência para o próprio ouvinte à contagem de referência do ponto de extremidade.
Adicione uma referência para cada conector aceito por esse ouvinte.
Remova uma referência quando um conector que foi aceito anteriormente pelo ouvinte for fechado.
Remova uma referência quando o próprio ouvinte estiver fechado. Nota Não é possível fechar o ouvinte até que todos os conectores sejam fechados.
Solte o ponto de extremidade quando sua contagem de referência retornar a zero. (Esse é o caso somente quando o ouvinte e todos os conectores aceitos pelo ouvinte foram fechados.)
Simplesmente fechar o ouvinte não libera o ponto de extremidade, desde que haja conectores aceitos anteriormente que ainda não estejam fechados. Isso significa que as novas solicitações NdkListen, NdkConnect e NdkConnectWithSharedEndpoint para o mesmo endereço local e porta falharão até que todas essas conexões sejam fechadas. Observe que a solicitação próxima no ouvinte também permanecerá pendente até que todas essas conexões sejam fechadas (devido às regras antecedentes/sucessoras descritas nos Requisitos de Tempo de Vida do Objeto NDKPI). O provedor deve rejeitar novas conexões de entrada no ouvinte assim que uma solicitação próxima for emitida (para que nenhuma nova conexão seja aceita enquanto a solicitação de fechamento estiver pendente).
Contagem de referência para conectores
Quando o consumidor chama NdkConnect, o provedor cria um ponto de extremidade implícito. Para esse ponto de extremidade implícito, o provedor deve:
- Adicione uma referência pelo conector. Há apenas um conector, portanto, apenas uma referência.
- Remova a referência do conector ao ponto de extremidade quando o conector for fechado.
- Solte o ponto de extremidade quando essa referência tiver sumido.
Contagem de referência para pontos de extremidade compartilhados
Quando o consumidor chama NdkConnectWithSharedEndpoint, o provedor cria um ponto de extremidade compartilhado explícito. Para esse ponto de extremidade compartilhado explícito, o provedor deve:
- Adicione uma referência para o ponto de extremidade compartilhado em si à contagem de referência do ponto de extremidade compartilhado.
- Adicione uma referência para cada conector conectado por esse ponto de extremidade compartilhado.
- Remova uma referência quando um conector que foi conectado anteriormente pelo ponto de extremidade compartilhado for fechado.
- Libere o ponto de extremidade que a contagem de referência retorna para zero. (Esse é o caso quando o ponto de extremidade compartilhado e todos os conectores conectados pelo ponto de extremidade compartilhado foram fechados.)
- Simplesmente fechar o ponto de extremidade compartilhado não libera o ponto de extremidade, desde que haja conectores conectados anteriormente que ainda não estejam fechados. Isso significa que as novas solicitações NdkListen, NdkConnect e NdkConnectWithSharedEndpoint para o mesmo endereço local e porta falharão até que todas essas conexões sejam fechadas. Observe que a solicitação de fechamento no ponto de extremidade compartilhado também permanecerá pendente até que todas essas conexões sejam fechadas (devido às regras antecedentes/sucessoras descritas nos Requisitos de Tempo de Vida do Objeto NDKPI).