共用方式為


建立和系結 SAN 通訊端

如果 Windows Sockets 參數判斷它可以透過 SAN 連線來路由資料,而不是透過 TCP/IP 堆疊,它會要求適當的 SAN 服務提供者來建立、系結及設定可傳輸資料的通訊端選項。

SAN 服務提供者所建立的通訊端 隨附于 TCP /IP 服務提供者在應用程式要求建立的通訊端,不論是從或傳輸資料到該通訊端。 如果 SAN 服務提供者支援這些選項,SAN 服務提供者所建立的 隨附通訊端 與 TCP/IP 服務提供者所建立的通訊端有相同的選項。

隨附通訊端也有與 TCP/IP 服務提供者所建立的通訊端相同的 IP 位址和 TCP 埠。 SAN 資料會透過 SAN 服務提供者所建立的隨附通訊端傳輸,而不是 TCP/IP 服務提供者所建立的通訊端。 應用程式看不到 SAN 通訊端。 從應用程式的觀點來看,資料會在要求建立資料傳輸的通訊端上傳送。

注意 交換器一律會使用 TCP/IP 服務提供者,透過 原始通訊端傳輸資料。 因此,交換器永遠不會要求 SAN 服務提供者建立原始通訊端。

下圖顯示 Windows Sockets 參數如何建立隨附通訊端的概觀。 後續各節中的順序會更詳細地說明如何建立隨附通訊端。

此圖顯示 Windows Sockets 參數如何建立隨附通訊端的概觀。

起始 TCP/IP 通訊端的建立

  1. 在 Windows Sockets 交換器收到應用程式起始的 WSPSocket 呼叫之後,交換器會呼叫 TCP/IP 提供者的 WSPSocket 函式來要求 TCP/IP 提供者建立通訊端。

  2. Windows Sockets 參數會將所建立通訊端的描述項傳回給應用程式,並將此描述項儲存在與通訊端相關聯的私人資料結構中。

    從應用程式的觀點來看,TCP/IP 提供者所建立的通訊端是用於資料傳輸的通訊端,不論交換器是使用 TCP/IP 服務提供者還是 SAN 服務提供者來傳輸資料。

系結 TCP/IP 通訊端

  1. 如果應用程式要求將通訊端系結至特定網路介面控制器, (NIC) 或萬用字元 IP 位址 (0.0.0.0) ,交換器就會收到 WSPBind 呼叫。 系結至萬用字元 IP 位址的通訊端可以接聽來自所有 NIC 的連入連線要求。

    注意 從 Windows Vista 開始,無法使用萬用字元 IP 位址 0.0.0.0。 此外,從 Windows Vista 開始,如果 IPAutoconfigurationEnabled 登錄機碼設定為 0 的值,則會停用自動 IP 位址指派,而且不會指派任何 IP 位址。 在此情況下, ipconfig 命令列工具將不會顯示 IP 位址。 如果金鑰設定為非零值,則會自動指派 IP 位址。 此機碼位於登錄中的下列路徑:

    HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\IPAutoconfigurationEnabled

    HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\Interfaces\GUID\IPAutoconfigurationEnabled

  2. 交換器會藉由呼叫 TCP/IP 提供者的 WSPBind 函式,將此呼叫轉送到 TCP/IP 服務提供者。

服務提供者判斷

  1. 參數會決定在應用程式起始 WSPListenWSPConnect 呼叫交換器之後,是否要使用 SAN 服務提供者在通訊端上進行資料傳輸,如 設定 SAN 連線中所述。

  2. 如果交換器判斷它無法使用 SAN 服務提供者進行資料傳輸,交換器會透過 TCP/IP 服務提供者路由傳送資料傳輸。

  3. 如果交換器選擇 SAN 服務提供者來服務應用程式的通訊端,交換器會呼叫 SAN 服務提供者的 WSPSocket 函式來建立隨附通訊端。

起始建立隨附通訊端

  1. SAN 服務提供者的 WSPSocket 函式會初始化內部資料結構,在其中儲存隨附通訊端的相關資訊。

  2. SAN 服務提供者的 WSPSocket 函式必須接著呼叫 WPUCreateSocketHandle 函式,才能從參數取得通訊端描述項。

  3. SAN 服務提供者必須將交換器的通訊端描述項儲存在其隨附通訊端的內部資料結構中,而且必須傳回自己的描述元,隨附通訊端才能完成 WSPSocket 呼叫。 SAN 服務提供者所傳回的通訊端描述元可以是任何有意義的值,例如私用資料結構的指標。

  4. 若要在通訊端上執行作業,交換器會提供 SAN 服務提供者傳回的通訊端描述項給 SAN 服務提供者的適當功能。 同樣地,如果 SAN 服務提供者進行下列任一呼叫,則 SAN 服務提供者必須提供從 WPUCreateSocketHandle 呼叫中的參數取得的通訊端描述項:

    WPUQuerySocketHandleCoNtext

    WPUCloseSocketHandle

    WPUCompleteOverlappedRequest

系結隨附通訊端

  1. 如果 SAN 服務提供者的 WSPSocket 函式成功完成,交換器會立即呼叫 SAN 服務提供者的 WSPBind 函式,將本機 IP 位址和 TCP 埠指派給通訊端。

  2. 交換器會將相同的 IP 位址和 TCP 埠指派給 SAN 通訊端,如同指派給 TCP/IP 提供者所建立的通訊端一樣。 SAN 服務提供者必須將此 TCP/IP 位址轉譯成其原生格式。

  3. 除非應用程式要求接聽來自所有 NIC 的連入連線,否則交換器會提供完整的 IP 位址和 TCP 埠 (,也就是非零值) 至 SAN 服務提供者的 WSPBind 函式。 在稍後的案例中,參數會將萬用字元 IP 位址提供給 SAN 服務提供者的 WSPBind 函式

設定隨附通訊端的選項

  • 如果應用程式指定了任何通訊端選項,交換器就會儲存這些選項。 建立 SAN 通訊端之後,交換器會針對應用程式所指定的每個支援選項呼叫 SAN 服務提供者的 WSPSetSockOpt 函式,立即為 SAN 通訊端設定這些選項。

失敗隨附通訊端呼叫

  • 如果 SAN 服務提供者對其 WSPSocketWSPBindWSPSetSockOpt 函式的任何上述呼叫失敗,交換器會呼叫 SAN 服務提供者的 WSPCloseSocket 函式來終結 SAN 通訊端。 接著,交換器會使用 TCP/IP 提供者繼續維護應用程式通訊端。 請注意,在交換器使用 SAN 服務提供者建立連線之後,交換器就無法使用 TCP/IP 提供者來服務應用程式的通訊端。 在此情況下,參數會將適當的錯誤傳回給應用程式。

連接隨附通訊端

  • 在交換器設定隨附通訊端之後,交換器會呼叫 WSPListenWSPConnect 函式,讓 SAN 服務提供者執行導致 SAN 服務提供者原本設定通訊端的作業。 例如,如果應用程式原本要求接聽連入連線,交換器會呼叫 SAN 服務提供者的 WSPListen 函式。