共用方式為


NDKPI 接聽器、連接器和端點

NDK 取用者會呼叫 NdkConnectNDK_FN_CONNECT) 或 NdkConnectWithSharedEndpointNDK_FN_CONNECT_WITH_SHARED_ENDPOINT) 函式來連接 NDK 連接器。

處於連線狀態的每個連接器也都有一個基礎端點,代表已建立 NDK 連線的本機端:

  • 透過 NDK 接聽程式接受連入連線所建立的連接器,會自動繼承接聽程式的隱含端點作為其本機隱含端點。
  • 透過 NdkConnect 函式連線的連接器有自己的專用隱含本機端點。
  • 透過 NdkConnectWithSharedEndpoint 函式連線的連接器具有明確的本機端點,可以與其他也透過 NdkConnectWithSharedEndpoint 函式連線的連接器共用。

當參考計數達到零時,NDK 提供者必須保留每個隱含或明確端點的某種參考計數,並釋放端點(亦即,將位址/埠標示為可供再次使用) :

未共享端點的參考計數

當取用者呼叫 NdkListenNDK_FN_LISTEN) 函式時,提供者會建立隱含端點。 針對這個隱含端點,提供者必須維護參考計數,如下所示:

  • 將接聽程式本身的參考新增至端點的參考計數。

  • 針對透過該接聽程式接受的每個連接器新增參考。

  • 當一個先前在接收器上接受的連接器被關閉時,請移除其參考。

  • 當監聽器本身被關閉時,請移除參考。 注意 關閉所有連接器之前,您無法關閉接聽器。

  • 當端點的參考計數傳回零時釋放端點。 (只有在監聽器和監聽器上接受的所有連接器都已關閉時,才會發生這種情況。)

  • 即便關閉接聽程式,也不會釋放端點,只要先前接受的連接器尚未關閉。 這表示新的 NdkListenNdkConnect,以及 NdkConnectWithSharedEndpoint 相同本機位址和埠的要求將會失敗,直到所有這類連線都關閉為止。 請注意,接聽程式上的關閉要求也會維持擱置,直到所有這類連線都關閉為止(因為 NDKPI 物件存留期需求中所述的前項/後續規則)。 提供者必須在發出關閉要求後立即拒絕監聽器上的進一步連入連線(此舉可確保在關閉要求仍在處理時不會接受任何新連線)。

連接器的參考計數

當消費者呼叫 NdkConnect時,提供者會創建一個隱含的端點。 針對這個隱含端點,提供者必須:

  • 在連接器旁新增參考。 只有一個連接器,因此只有一個參考。
  • 關閉連接器時,請移除連接器對端點的參考。
  • 當該參考消失時,請釋放端點。

共用端點的參考計數

當取用者呼叫 NdkConnectWithSharedEndpoint時,提供者會建立明確的共用端點。 針對這個明確的共用端點,提供者必須:

  • 將共用端點本身的參考新增至共用端點的參考計數。
  • 針對透過該共用端點連線的每個連接器新增參考。
  • 當之前透過共用端點連線的連接器關閉時,請移除參考。
  • 當參考計數歸零時,釋放該端點。 (這是共用端點和透過共用端點連線的所有連接器已關閉的情況。
  • 只要先前連線的連接器尚未關閉,只要關閉共用端點並不會釋放端點。 這表示,針對相同本機位址和埠的新 NdkListenNdkConnect以及 NdkConnectWithSharedEndpoint 的請求將會失敗,直到所有這類連線都關閉為止。 請注意,針對共用端點的關閉命令也會保持擱置狀態,直到所有這類連線都關閉為止(因為 NDKPI 物件存留期需求中所述的前項/後續規則)。

網路直接核心提供者介面 (NDKPI)