2016年9月29日 星期四

TDI Operations - V

Making an Endpoint-to-Endpoint Connection

TDI客戶端在不同的網路節點與他各自的傳輸共同合作,在他們彼此之間建立點對點的連接。而在試圖嘗試連接之前,每一個客戶對它的在節點必須做下列的處理:
1.  開啟一個傳輸位址,同Opening a Transport Address
2.  開啟一個連結端點,同Opening a Connection Endpoint
3. 透過TDI_ASSOCIATE_ADDRESS關聯開啟的連與位址。

然後,其中一個客戶端對其他人建立一個連接,通常其他人都處於被動的聆聽(listen)連接到來。

如果客戶端對它底層傳輸註冊了它的ClientEventConnect。則當有任何來自於遠端節點的連接,則傳輸驅動會調用ClientEventConnect

Requesting a Connection to a Remote Node

下圖示範一個本地端節點的TDI客戶如何對遠端節點啟動一個連接處理。


本地端節點客戶透過提交一個TDI_CONNECT請求來對遠端節點建立一個連接處理,客戶可以透過TdiBuildConnect來封裝這個請求。

本地端節點傳輸從它的客戶端那裏確定遠端節點的位址,並且與遠端節點傳輸合作傳輸連結工作。

如果在之前遠端節點的客戶端有提交一個TDI_LISTEN請求或是註冊ClientEventConnect處理程序,則當有一個連接請求進入時,遠端節點傳輸會通知它的客戶。

如果遠端節點客戶沒有聆聽(listen)或是沒有回應,則本地端節點傳輸會得到連接失敗的結果。遠端節點可以接受或是拒絕連結,如果傳輸支援delayed-connection acceptance,在稍後會有描述。

Accepting a Connection Offer from a Remote Node

下圖示範一個本地端節點客戶如何聆聽一個來自於遠端節點的連接處理。

要建立一個點對點連接,一個客戶會提出一個連接請求,然後其他客戶會對它底層傳輸示意等待一個連接請求的來臨。

本地端節點客戶可以透過提交一個TDI_LISTEN請求來被動地聆聽一個正要進入的連結,客戶可以透過TdiBuildListen來封裝這個請求。當客戶在設定聆聽(listen)IRP時,可以指定可以接收請求發生的遠端節點傳輸位址。如果傳輸支援delayed-connection acceptances,則客戶端可以指定傳輸立即的接收來自於遠端節點的連接,或是允許客戶檢這個請求並且決定是否要接收。

當傳輸接收一個TDI_LISTEN請求,它會監視來自於遠端節點的連接。當它接收到一個遠端位址的連接,傳輸會複製交易的訊息到本地客戶端配置的緩衝區,並且會完成IRP給監聽的客戶端。

接收一個連接有更簡單的方式,如果本地端客戶使用事件處理函式。當傳輸接收一個來自遠端節點的連接,則傳輸會調用客戶端註冊的ClientEventConnect處理函式。ClientEventConnect接者會接收或是否決這個請求。

沒有留言:

張貼留言