NDKPI 수신기, 커넥터 및 엔드포인트

NDK 소비자는 NdkConnect(NDK_FN_CONNECT) 또는 NdkConnectWithSharedEndpoint(NDK_FN_CONNECT_WITH_SHARED_ENDPOINT) 함수를 호출하여 NDK 커넥터를 연결합니다.

연결된 상태에 있는 각 커넥터에는 설정된 NDK 연결의 로컬 끝을 나타내는 기본 엔드포인트도 있습니다.

  • NDK 수신기를 통해 들어오는 연결을 수락하여 설정된 커넥터는 수신기의 암시적 엔드포인트를 로컬 암시적 엔드포인트로 자동으로 상속합니다.
  • NdkConnect 함수를 통해 연결된 커넥터에는 고유한 전용 암시적 로컬 엔드포인트가 있습니다.
  • NdkConnectWithSharedEndpoint 함수를 통해 연결된 커넥터에는 NdkConnectWithSharedEndpoint 함수를 통해 연결된 다른 커넥터와 공유할 수 있는 명시적 로컬 엔드포인트가 있습니다.

NDK 공급자는 각 암시적 또는 명시적 엔드포인트에 대해 일종의 참조 수를 유지하고 참조 수가 0에 도달하면 엔드포인트(즉, 주소/포트를 다시 사용할 수 있는 것으로 표시)를 해제해야 합니다.

(공유가 아닌) 엔드포인트에 대한 참조 계산

소비자가 NdkListen (NDK_FN_LISTEN) 함수를 호출하면 공급자는 암시적 엔드포인트를 만듭니다. 이 암시적 엔드포인트의 경우 공급자는 다음과 같이 참조 횟수를 유지해야 합니다.

  • 수신기 자체에 대한 참조를 엔드포인트의 참조 수에 추가합니다.

  • 해당 수신기를 통해 허용되는 각 커넥터에 대한 참조를 추가합니다.

  • 이전에 수신기를 통해 허용된 커넥터가 닫혀 있을 때 참조를 제거합니다.

  • 수신기 자체가 닫혀 있을 때 참조를 제거합니다. 참고 모든 커넥터가 닫히기 전까지는 수신기를 닫을 수 없습니다.

  • 참조 수가 0으로 반환되면 엔드포인트를 해제합니다. (수신기 및 수신기를 통해 수락된 모든 커넥터가 닫힌 경우에만 해당됩니다.)

  • 수신기를 닫기만 하면 아직 닫히지 않은 이전에 허용된 커넥터가 있는 한 엔드포인트가 해제되지 않습니다. 즉, 동일한 로컬 주소 및 포트에 대한 새 NdkListen, NdkConnectNdkConnectWithSharedEndpoint 요청은 이러한 모든 연결이 닫히기 전까지 실패합니다. 수신기에 대한 닫기 요청은 NDKPI 개체 수명 요구 사항에 설명된 선행/후속 규칙으로 인해 이러한 모든 연결이 닫히기 전까지 보류 상태로 유지됩니다. 공급자는 닫기 요청이 발급되는 즉시 수신기에서 들어오는 추가 연결을 거부해야 합니다(닫기 요청이 보류 중인 동안 새 연결이 허용되지 않도록).

커넥터에 대한 참조 계산

소비자가 NdkConnect를 호출하면 공급자는 및 암시적 엔드포인트를 만듭니다. 이 암시적 엔드포인트의 경우 공급자는 다음을 수행해야 합니다.

  • 커넥터에서 참조를 추가합니다. 커넥터가 하나만 있으므로 하나의 참조만 있습니다.
  • 커넥터가 닫혀 있을 때 엔드포인트에 대한 커넥터의 참조를 제거합니다.
  • 해당 참조가 사라지면 엔드포인트를 해제합니다.

공유 엔드포인트에 대한 참조 계산

소비자가 NdkConnectWithSharedEndpoint를 호출하면 공급자는 명시적 공유 엔드포인트를 만듭니다. 이 명시적 공유 엔드포인트의 경우 공급자는 다음을 수행해야 합니다.

  • 공유 엔드포인트 자체에 대한 참조를 공유 엔드포인트의 참조 수에 추가합니다.
  • 해당 공유 엔드포인트를 통해 연결된 각 커넥터에 대한 참조를 추가합니다.
  • 이전에 공유 엔드포인트를 통해 연결되었던 커넥터가 닫힌 경우 참조를 제거합니다.
  • 참조 수가 0으로 반환하는 엔드포인트를 해제합니다. (공유 엔드포인트와 공유 엔드포인트를 통해 연결된 모든 커넥터가 닫힌 경우입니다.)
  • 공유 엔드포인트를 닫는 것만으로는 아직 닫히지 않은 이전에 연결된 커넥터가 있는 한 엔드포인트가 해제되지 않습니다. 즉, 동일한 로컬 주소 및 포트에 대한 새 NdkListen, NdkConnectNdkConnectWithSharedEndpoint 요청은 이러한 모든 연결이 닫히기 전까지 실패합니다. NDKPI 개체 수명 요구 사항에 설명된 선행/후속 규칙으로 인해 이러한 모든 연결이 닫히기 전까지 공유 엔드포인트에 대한 닫기 요청도 보류 상태로 유지됩니다.

네트워크 직접 커널 공급자 인터페이스(NDKPI)