Disconnecting an Endpoint-to-Endpoint Connection
下圖示範一個TDI客戶如何釋放一個點對點連接。
斷線行為是傳輸特有的性質。當一個連線導向TDI客戶發起一個斷線,兩個節點會進行斷線操作。也就是說,當一個客戶發起一個斷線,則遠端節點客戶必須回應這個請求。
在一個斷線操作期間,TDI傳輸驅動在開啟的連接端點通常會拒絕進入的請求,並且在指定的連接端點停止所有的活動。
如上圖所示,一個客戶在一個點對點連線上可以透過提交一個 TDI_DISCONNECT 請求來發起一個斷線操作。客戶可以透過 TdiBuildDisconnect 來封裝並交給底層傳輸。當傳輸結束了客戶端的請求,它會通知遠端節點傳輸驅動一個斷線正在進行,並且這個傳輸在點對點連線上為了客戶提交的I/O請求開始回傳一個適合的狀態碼。
如果回應的客戶註冊它的 ClientEventDisconnect 處理函式,則當斷線發生的時候,TDI傳輸會通知客戶。接者,ClientEventDisconnect 建立一個 TDI_DISCONNECT 來對底層的傳輸確認這個斷線。這個通知允許回應的客戶立即的清除客戶為了點對點連線所配置的狀態。
然而,一個斷線操作並不會關閉客戶端所開啟的連接端點或是傳輸位址。在 TDI_DISCONNECT 完成以後,客戶還是可以重新使用這些檔案物件。例如,客戶在稍後建立網路連線,這在Making an
Endpoint-to-Endpoint Connection有介紹過。一直到每個客戶關閉它的連接端點以及關聯的傳輸位址前,這些資源都會保留給客戶提交的IOCTL請求使用。這在稍後的Closing a
Connection Endpoint以及Closing a
Transport Address or Control Channel分別的會被介紹。
沒有留言:
張貼留言