ws2spi.) h (LPWSPSOCKET 回呼函式
LPWSPSocket 函式會建立套接字。 如需 LPWSPSocket 在建立共用套接字中播放之部分的相關信息,請參閱 SPI 中的共用 套接字 和 共用套接字。
語法
LPWSPSOCKET Lpwspsocket;
SOCKET Lpwspsocket(
[in] int af,
[in] int type,
[in] int protocol,
[in] LPWSAPROTOCOL_INFOW lpProtocolInfo,
[in] GROUP g,
DWORD dwFlags,
[out] LPINT lpErrno
)
{...}
參數
[in] af
位址系列規格。
[in] type
新套接字的類型規格。
[in] protocol
要與指定之位址系列專屬之套接字搭配使用的通訊協定。
[in] lpProtocolInfo
定義要建立之套接字特性 的WSAProtocol_Info 結構的指標。
[in] g
保留的。
dwFlags
套接字屬性規格。
[out] lpErrno
錯誤碼的指標。
傳回值
如果未發生任何錯誤, LPWSPSocket 會傳回參考新套接字的描述元。 否則,會傳回INVALID_SOCKET的值,並在 lpErrno 中提供特定的錯誤碼。
錯誤碼 | 意義 |
---|---|
網路子系統失敗。 | |
不支援指定的位址系列。 | |
封鎖 Windows Sockets 呼叫正在進行中,或服務提供者仍在處理回呼函式。 | |
不再有可用的通訊端描述項。 | |
沒有可用的緩衝區空間。 無法建立套接字。 | |
不支援指定的通訊協定。 | |
指定的通訊協定是這個套接字的錯誤類型。 | |
此位址系列不支援指定的套接字類型。 | |
指定的參數 g 無效。 |
備註
LPWSPSocket 函式會導致配置套接字描述元和任何相關資源。 根據預設,建立的套接字不會有重疊的屬性。 鼓勵 Windows Sockets 提供者成為 Windows 可安裝的文件系統,並提供系統檔句柄做為套接字描述元。 這些提供者必須在從此函式傳回之前呼叫 WPUModifyIFSHandle 。 對於非文件系統 Windows Sockets 提供者, WPUCreateSocketHandle 必須用來從 Ws2_32.dll 取得唯一的套接字描述項,才能從此函式傳回。 請參閱
如需詳細資訊,請參閱描述項配置 。
af、類型和通訊協定的值是由應用程式在對應的 API 函式套接字或 WSASocket 中提供的值。 服務提供者可以忽略或注意適用於特定通訊協定的任何或所有值。 不過,提供者必須願意接受 af 和 type 的零值,因為 Ws2_32.dll 將這些值視為通配符值。 此外,任何 af、類型和通訊協議都必須接受指令清單常數FROM_PROTOCOL_INFO的值。 這個值表示 Windows Sockets 2 應用程式必須使用來自 WSAProtocol_Info 結構的對應值 , (iAddressFamily、 iSocketType、 iProtocol) 。
dwFlags 參數可用來指定套接字的屬性,方法是搭配下列任一旗標使用位 OR 運算元。
旗標 | 意義 |
---|---|
WSA_FLAG_OVERLAPPED | 此旗標會導致建立重疊的套接字。 重疊的套接字可以利用 LPWSPSend、 LPWSPSendTo、 LPWSPRecv、 LPWSPRecvFrom 和 LPWSPIoctl 進行重疊的 I/O 作業,允許同時起始和處理多個作業。 如果與重疊作業相關的參數值為 Null,則允許重疊作業的所有函式也支援重疊套接字上的非重疊使用方式。 |
WSA_FLAG_MULTIPOINT_C_ROOT | 表示建立的套接字將會是多點會話中的c_root。 只有在通訊協定 WSAProtocol_Info 結構中指出根控制平面時,才允許。 |
WSA_FLAG_MULTIPOINT_C_LEAF | 表示建立的套接字將會是多播會話中的c_leaf。 只有在通訊協定 WSAProtocol_Info 結構中指出XP1_SUPPORT_MULTIPOINT時才允許。 |
WSA_FLAG_MULTIPOINT_D_ROOT | 表示建立的套接字將會是多點會話中的d_root。 只有在通訊協定 WSAProtocol_Info 結構中指出根數據平面時,才允許。 |
WSA_FLAG_MULTIPOINT_D_LEAF | 表示建立的套接字將會是多點會話中的d_leaf。 只有在通訊協定 WSAProtocol_Info 結構中指出XP1_SUPPORT_MULTIPOINT時才允許。 |
注意
針對多點套接字,必須指定一個WSA_FLAG_MULTIPOINT_C_ROOT或WSA_FLAG_MULTIPOINT_C_LEAF,而且必須只指定其中一個WSA_FLAG_MULTIPOINT_D_ROOT或WSA_FLAG_MULTIPOINT_D_LEAF。 如需詳細資訊,請參閱 SPI 中的通訊協議獨立多播和多點 。
SOCK_STREAM之類的連線導向套接字提供全雙工連線,而且必須處於連線狀態,才能傳送或接收任何數據。 使用 LPWSPConnect 呼叫建立另一個套接字的連線。 連線之後,可以使用 LPWSPSend 和 LPWSPRecv 呼叫來傳輸數據。 會話完成時,必須執行 LPWSPCloseSocket 。
用來實作可靠、連線導向套接字的通訊協議可確保數據不會遺失或重複。 如果對等通訊協定具有緩衝區空間的數據無法在合理的時間內成功傳輸,則會將連線視為中斷,後續呼叫將會失敗,並將錯誤碼設定為 WSAETIMEDOUT。
無連線、訊息導向的套接字允許使用 LPWSPSendTo 和 LPWSPRecvFrom,在任意對等端傳送和接收數據報。 如果使用 LPWSPConnect 連線到特定對等,數據報可以使用 LPWSPSend 傳送至該對等,而且只能透過 LPWSPRecv 從 (接收此對等) 。
不需要支援類型 為 SOCK RAW 的套接字,但建議服務提供者隨時支援原始套接字。
分層服務提供者會提供此函式的實作,但如果它呼叫通訊協定鏈結中下一層的 LPWSPSocket ,也是此函式的用戶端。 某些特殊考慮適用於此函式的 lpProtocolInfo 參數,因為它會透過通訊協定鏈結的層級向下傳播。
如果通訊協定鏈結中的下一層是另一層,則呼叫下一層的 LPWSPSocket 時,此層必須傳遞至下一層 lpProtocolInfo ,該層會參考具有相同未修改 的鏈 結資訊的相同未修改WSAProtocol_Info結構。 不過,如果下一層是基底通訊協定 (也就是鏈結中的最後一個專案) ,則呼叫基底提供者的 LPWSPSocket 時,此層會執行替代作業。 在此情況下,基底提供者 的WSAPROTOCOL_INFO 結構應該由 lpProtocolInfo 參數參考。
此原則的其中一個重要優點是基底服務提供者不需要注意通訊協定鏈結。
透過 LPWSPAddressToString、LPWSPDuplicateSocket、WSPStartup 或 LPWSPStringToAddress 等分層式來傳播WSAProtocol_Info結構時,適用相同的傳播原則。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | ws2spi.h |