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 物件存留期需求) 中所述的前項/後續規則而關閉 (。