WPUCreateSocketHandle 函式 (ws2spi.h)
WPUCreateSocketHandle函式會建立新的通訊端控制碼。
語法
SOCKET WPUCreateSocketHandle(
[in] DWORD dwCatalogEntryId,
[in] DWORD_PTR dwContext,
[out] LPINT lpErrno
);
參數
[in] dwCatalogEntryId
識別呼叫服務提供者的描述項。
[in] dwContext
要與新通訊端控制碼建立關聯的內容值。
[out] lpErrno
錯誤碼的指標。
傳回值
如果沒有發生錯誤, WPUCreateSocketHandle 會傳回新的通訊端控制碼。 否則,它會傳回INVALID_SOCKET,而且 lpErrno中提供特定的錯誤碼。
錯誤碼 | 意義 |
---|---|
沒有足夠的緩衝區可用來建立新的通訊端控制碼。 |
備註
WPUCreateSocketHandle函式會為指定的提供者建立新的通訊端控制碼。 WPUCreateSocketHandle所建立的控制碼與真正的檔案系統控制碼不相同。 這在兩方面很重要。 首先,Windows Socket 2 架構負責將檔案系統函式 ReadFile 和 WriteFile 分別重新導向至此服務提供者的 LPWSPRecv 和 LPWSPSend 函式。 其次,在支援完成埠的作業系統中,Windows Sockets 2 架構支援將完成埠與通訊端控制碼建立關聯,並用它來報告重迭的 I/O 完成。
此程式對分層服務提供者特別感興趣。 分層服務提供者可能會使用此程式,而不是 WPUModifyIFSHandle 來建立它向其用戶端公開的通訊端控制碼。 使用此程式的優點是,可以保證所有涉及通訊端的 I/O 要求都能通過此服務提供者。 即使用戶端假設通訊端是檔案系統控制碼,並呼叫檔案系統函式 ReadFile 和 WriteFile (,但此假設會支付效能損失) 。
保證所有 I/O 都會通過此層,這是在實際 I/O 作業之前或之後處理 I/O 資料流程所需的層需求。 使用 WPUCreateSocketHandle 建立通訊端控制碼,並在 WSPStartup 時指定適當的服務提供者介面過程分派資料表,可確保圖層有機會開始每個 I/O 作業。 當用戶端要求重迭的 I/O 作業時,此服務提供者層通常必須安排以進入 I/O 完成通知的路徑。
若要查看原因,請考慮如果用戶端將完成埠與通訊端控制碼產生關聯,以達到重迭 I/O 完成通知的目的,會發生什麼事。 埠與這個層公開的通訊端控制碼相關聯,而不是下一層的通訊端控制碼。 此層無法判斷完成埠是否已相關聯或埠是什麼。 當此層呼叫下一層的 I/O 作業時,它會使用下一層的通訊端控制碼。 下一層的通訊端控制碼不會有相同的完成埠關聯。 用戶端的預期完成埠通知不會發生,而不會有一些額外的協助。
分層服務提供者處理此作業的一般方式,是在下一層叫用 I/O 作業時,替代不同的重迭 I/O 結構和不同的重迭 I/O 參數。 替代的重迭 I/O 結構會參考用戶端儲存的重迭結構和參數。 下一層的調用會設定回呼通知。 發生回呼通知時,此層會執行任何所需的後續處理、擷取代表用戶端儲存的重迭 I/O 資訊、捨棄替代結構,並將適當的完成通知轉送給用戶端。
規格需求
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | ws2spi.h |