NDKPI 接聽器、連接器和端點
NDK 取用者會呼叫 NdkConnect (NDK_FN_CONNECT) 或 NdkConnectWithSharedEndpoint (NDK_FN_CONNECT_WITH_SHARED_ENDPOINT) 函式來連接 NDK 連接器。
處於連線狀態的每個連接器也都有一個基礎端點,代表已建立 NDK 連線的本機端:
- 透過 NDK 接聽程式接受連入連線所建立的連接器,會自動繼承接聽程式的隱含端點作為其本機隱含端點。
- 透過 NdkConnect 函式連線的連接器有自己的專用隱含本機端點。
- 透過 NdkConnectWithSharedEndpoint 函式連線的連接器具有明確的本機端點,可以與其他也透過 NdkConnectWithSharedEndpoint 函式連線的連接器共用。
當參考計數達到零時,NDK 提供者必須保留每個隱含或明確端點的某種參考計數,並釋放端點(亦即,將位址/埠標示為可供再次使用) :
未共享端點的參考計數
當取用者呼叫 NdkListen (NDK_FN_LISTEN) 函式時,提供者會建立隱含端點。 針對這個隱含端點,提供者必須維護參考計數,如下所示:
將接聽程式本身的參考新增至端點的參考計數。
針對透過該接聽程式接受的每個連接器新增參考。
當一個先前在接收器上接受的連接器被關閉時,請移除其參考。
當監聽器本身被關閉時,請移除參考。 注意 關閉所有連接器之前,您無法關閉接聽器。
當端點的參考計數傳回零時釋放端點。 (只有在監聽器和監聽器上接受的所有連接器都已關閉時,才會發生這種情況。)
即便關閉接聽程式,也不會釋放端點,只要先前接受的連接器尚未關閉。 這表示新的 NdkListen、NdkConnect,以及 NdkConnectWithSharedEndpoint 相同本機位址和埠的要求將會失敗,直到所有這類連線都關閉為止。 請注意,接聽程式上的關閉要求也會維持擱置,直到所有這類連線都關閉為止(因為 NDKPI 物件存留期需求中所述的前項/後續規則)。 提供者必須在發出關閉要求後立即拒絕監聽器上的進一步連入連線(此舉可確保在關閉要求仍在處理時不會接受任何新連線)。
連接器的參考計數
當消費者呼叫 NdkConnect時,提供者會創建一個隱含的端點。 針對這個隱含端點,提供者必須:
- 在連接器旁新增參考。 只有一個連接器,因此只有一個參考。
- 關閉連接器時,請移除連接器對端點的參考。
- 當該參考消失時,請釋放端點。
共用端點的參考計數
當取用者呼叫 NdkConnectWithSharedEndpoint時,提供者會建立明確的共用端點。 針對這個明確的共用端點,提供者必須:
- 將共用端點本身的參考新增至共用端點的參考計數。
- 針對透過該共用端點連線的每個連接器新增參考。
- 當之前透過共用端點連線的連接器關閉時,請移除參考。
- 當參考計數歸零時,釋放該端點。 (這是共用端點和透過共用端點連線的所有連接器已關閉的情況。
- 只要先前連線的連接器尚未關閉,只要關閉共用端點並不會釋放端點。 這表示,針對相同本機位址和埠的新 NdkListen、NdkConnect以及 NdkConnectWithSharedEndpoint 的請求將會失敗,直到所有這類連線都關閉為止。 請注意,針對共用端點的關閉命令也會保持擱置狀態,直到所有這類連線都關閉為止(因為 NDKPI 物件存留期需求中所述的前項/後續規則)。