WSAPROTOCOL_INFOA 結構 (winsock2.h)
WSAPROTOCOL_INFO 結構可用來儲存或擷取指定通訊協定的完整資訊。
語法
typedef struct _WSAPROTOCOL_INFOA {
DWORD dwServiceFlags1;
DWORD dwServiceFlags2;
DWORD dwServiceFlags3;
DWORD dwServiceFlags4;
DWORD dwProviderFlags;
GUID ProviderId;
DWORD dwCatalogEntryId;
WSAPROTOCOLCHAIN ProtocolChain;
int iVersion;
int iAddressFamily;
int iMaxSockAddr;
int iMinSockAddr;
int iSocketType;
int iProtocol;
int iProtocolMaxOffset;
int iNetworkByteOrder;
int iSecurityScheme;
DWORD dwMessageSize;
DWORD dwProviderReserved;
CHAR szProtocol[WSAPROTOCOL_LEN + 1];
} WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA;
成員
dwServiceFlags1
類型: DWORD
描述通訊協定所提供服務的位掩碼。 此成員的可能值定義於 Winsock2.h 頭檔中。
可以取得下列值。
值 | 意義 |
---|---|
|
提供無連線 (數據報) 服務。 如果未設定,通訊協定支援連線導向數據傳輸。 |
|
保證傳送的所有數據都會到達預定的目的地。 |
|
保證數據只會依傳送的順序抵達,而且不會重複。 此特性不一定表示數據一律會傳遞,但傳遞的任何數據都會依傳送的順序傳遞。 |
|
接受訊息界限,與沒有訊息界限概念的數據流導向通訊協定相反。 |
|
訊息導向通訊協定,但所有收據都會忽略訊息界限。 當應用程式不想要通訊協定完成訊息框架時,這會很方便。 |
|
支援雙階段 (正常) 關閉。 如果未設定,則只會執行中止關閉。 |
|
支援加速 (緊急) 數據。 |
|
支援連接數據。 |
|
支援中斷連線數據。 |
|
支援廣播機制。 |
|
支援多點或多播機制。 控件和數據平面屬性如下所示。 |
|
指出控制平面是根目錄 (值 = 1) 或非根 (值 = 0) 。 |
|
指出數據平面的根目錄 (值 = 1) 或非根 (值 = 0) 。 |
|
支援服務品質要求。 |
|
位是保留的。 |
|
通訊協議在傳送方向中是單向的。 |
|
通訊協定是正向的單向通訊協定。 |
|
提供者傳回的套接字描述元是操作系統可安裝文件系統 (IFS) 句柄。 |
|
WSASend 和 WSASendTo 支援MSG_PARTIAL旗標。 |
|
通訊協定提供 SAN 的支援。
Windows 7 和 Windows Server 2008 R2 支援此值。 |
dwServiceFlags2
類型: DWORD
保留給其他通訊協定屬性定義。
dwServiceFlags3
類型: DWORD
保留給其他通訊協定屬性定義。
dwServiceFlags4
類型: DWORD
保留給其他通訊協定屬性定義。
dwProviderFlags
類型: DWORD
一組旗標,提供 Winsock 目錄中如何表示此通訊協議的資訊。 此成員的可能值定義於 Winsock2.h 頭檔中。
可以取得下列旗標值。
值 | 意義 |
---|---|
|
表示這是指定提供者中單一通訊協定 (的兩個或多個專案之一,) 能夠實作多個行為。 其中一個範例是SPX,在接收端上,其行為可以是訊息導向或數據流導向通訊協定。 |
|
表示這是可實作多個行為的通訊協議建議或最常使用的專案。 |
|
由提供者設定,以向 Ws2_32.dll 指出 WSAEnumProtocols 所產生的結果緩衝區中不應該傳回此通訊協定。 很明顯地,Windows Sockets 2 應用程式應該永遠不會看到已設定此位的專案。 |
|
表示套接字或 WSASocket 通訊協定參數中的零值符合此通訊協議專案。 |
|
由提供者設定,表示支援網路直接存取。
Windows 7 和 Windows Server 2008 R2 支援此值。 |
ProviderId
類型: GUID
服務提供者指派給提供者的全域唯一標識符 (GUID) 。 這個值適用於多個服務提供者能夠實作特定通訊協議的實例。 應用程式可以使用 ProviderId 成員來區別可能不區分的提供者。
dwCatalogEntryId
類型: DWORD
每個 WSAPROTOCOL_INFO 結構 WS2_32.DLL 指派的唯一標識符。
ProtocolChain
類型: WSAPROTOCOLCHAIN
與通訊協議相關聯的 WSAPROTOCOLCHAIN 結構。 如果鏈結的長度為 0,則此 WSAPROTOCOL_INFO 專案代表具有 Windows Sockets 2 SPI 的分層通訊協定,做為其上邊緣和下邊緣。 如果鏈結的長度等於 1,此專案代表基底通訊協定,其目錄專案標識符位於WSAPROTOCOL_INFO結構的 dwCatalogEntryId 成員中。 如果鏈結的長度大於 1,此專案代表通訊協定鏈結,此鏈結是由基底通訊協定之上的一或多個分層通訊協定所組成。 對應的目錄專案標識碼位於 ProtocolChain.ChainEntries 陣列中,從通訊協定頂端的分層通訊協議開始, (ProtocolChain.ChainEntries 陣列中的零元素) ,並以基底通訊協定結尾。 如需通訊協定鏈結的詳細資訊,請參閱 Windows Sockets 2 服務提供者介面規格。
iVersion
類型: int
通訊協定版本標識碼。
iAddressFamily
類型: int
要當做位址系列參數傳遞至 套接字 或 WSASocket 函式的值,以便開啟此通訊協定的套接字。 這個值也會唯一定義通訊協定所使用的 sockaddr 通訊協議地址結構。
在針對 Windows Vista 和更新版本發行的 Windows SDK 上,位址系列的可能值定義在 Ws2def.h 頭檔中。 請注意, Ws2def.h 頭文件會自動包含在 Winsock2.h 中,不應直接使用。
在 Windows Server 2003 和較舊版本的 Platform SDK 版本上,位址系列的可能值定義在 Winsock2.h 頭檔中。
目前支援的值AF_INET或AF_INET6,這是 IPv4 和 IPv6 的因特網位址系列格式。 如果已安裝位址系列 Windows Sockets 服務提供者,則支援與 NetBIOS 搭配使用的位址系列 (AF_NETBIOS 的其他選項,例如) 。 請注意,AF_位址系列和PF_通訊協定系列常數的值 (相同,例如, AF_INET 和 PF_INET) ,因此可以使用任一個常數。
下表列出位址系列常見的值,但可能有許多其他值。
iAddressFamily | 意義 |
---|---|
|
因特網通訊協定第 4 版 (IPv4) 位址系列。 |
|
IPX/SPX 位址系列。 只有在安裝 NWLink IPX/SPX NetBIOS 相容傳輸通訊協定時,才支援此位址系列。
Windows Vista 和更新版本不支援此位址系列。 |
|
AppleTalk 位址系列。 只有在安裝 AppleTalk 通訊協定時,才支援此位址系列。
Windows Vista 和更新版本不支援此位址系列。 |
|
NetBIOS 位址系列。 只有在已安裝 NetBIOS 的 Windows Sockets 提供者時,才支援此位址系列。
32 位版本的 Windows 支援 NetBIOS 的 Windows 套接字提供者。 此提供者預設會安裝在32位版本的Windows上。 64 位版本的 Windows 不支援 NetBIOS 的 Windows Sockets 提供者,包括 Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 或 Windows XP。 NetBIOS 的 Windows Sockets 提供者僅支援 類型 參數設定為 SOCK_DGRAM的套接字。 NetBIOS 的 Windows Sockets 提供者與 NetBIOS 程式設計介面不直接相關。 Windows Vista、Windows Server 2008 及更新版本不支援 NetBIOS 程式設計介面。 |
|
因特網通訊協定第 6 版 (IPv6) 位址系列。 |
|
IrDA (IrDA) 位址系列。
只有在計算機已安裝基礎結構埠和驅動程式時,才支援此位址系列。 |
|
藍牙位址系列。
如果計算機已安裝藍牙適配卡和驅動程式,Windows XP 上的SP2或更新版本支援此位址系列。 |
iMaxSockAddr
類型: int
最大地址長度,以位元組為單位。
iMinSockAddr
類型: int
最小位址長度,以位元組為單位。
iSocketType
類型: int
要當做套接字類型參數傳遞至 套接字 或 WSASocket 函式的值,以便開啟此通訊協定的套接字。 套接字類型的可能值定義在 Winsock2.h 頭檔中。
下表列出 Windows Sockets 2 支援的 iSocketType 成員可能值:
iSocketType | 意義 |
---|---|
|
套接字類型,提供具有 OOB 數據傳輸機制的循序、可靠、雙向、以連線為基礎的位元組數據流。 此套接字類型會針對因特網位址系列 (AF_INET 或AF_INET6) 使用传输控制通讯协议 (TCP) 。 |
|
支援數據報的套接字類型,這些數據報是無連接、不可靠的固定 (通常很小) 最大長度。 此套接字類型會針對因特網位址系列 (AF_INET 或AF_INET6) 使用用户数据报通讯协议 (UDP) 。 |
|
提供原始套接字的套接字類型,可讓應用程式操作下一層通訊協議標頭。 若要操作 IPv4 標頭,必須在套接字上設定 IP_HDRINCL 套接字選項。 若要操作 IPv6 標頭,必須在套接字上設定 IPV6_HDRINCL 套接字選項。 |
|
提供可靠訊息數據報的套接字類型。 此類型的範例是 Windows 中的「實用一般多播」 (PGM) 多播通訊協議實作,通常稱為 可靠的多播程序設計。
只有在安裝可靠的多播通訊協定時,才支援此值。 |
|
套接字類型,提供以數據報為基礎的虛擬串流封包。 |
iProtocol
類型: int
要當做 通訊協議 參數傳遞至 套接字 或 WSASocket 函式的值,以便開啟此通訊協定的套接字。 iProtocol 成員的可能選項專屬於指定的位址系列和套接字類型。
在針對 Windows Vista 和更新版本發行的 Windows SDK 上,此成員可以是 Ws2def.h 頭檔中定義之 IPPROTO 列舉類型的其中一個值。 請注意, Ws2def.h 頭文件會自動包含在 Winsock2.h 中,不應該直接使用。
在適用於 Windows Server 2003 和更早版本的平臺 SDK 上, iProtocol 成員的可能值定義在 Winsock2.h 和 Wsrm.h 頭檔中。
下表列出 iProtocol 的一般值,但可能有許多其他值。
iProtocolMaxOffset
類型: int
將通訊協議參數的值提供給 socket 或 WSASocket 函式時,可能會新增至 iProtocol 的最大值。 並非所有通訊協議都允許一系列的值。 當這是 iProtocolMaxOffset 為零的情況時。
iNetworkByteOrder
類型: int
目前,這些值是 BIGENDIAN 和 LITTLEENDIAN () 的指令清單常數,分別表示值為 0 和 1 的 big-endian 或 small-endian。
iSecurityScheme
類型: int
如果有任何) ,則採用的安全性配置類型 (。 SECURITY_PROTOCOL_NONE (0) 的值會用於不包含安全性布建的通訊協定。
dwMessageSize
類型: DWORD
通訊協議支援的訊息大小上限,以位元組為單位。 這是可從任何主機本機介面傳送的大小上限。 對於不支援訊息框架的通訊協定,可以傳送至指定地址的實際最大值可能較少。 沒有標準布建可判斷輸入訊息大小上限。 定義下列特殊值。
值 | 意義 |
---|---|
|
通訊協議是數據流導向的,因此訊息大小的概念並不相關。 |
|
輸出 (傳送) 訊息大小上限取決於基礎網路 MTU (最大大小傳輸單位) ,因此在套接字系結之後才能得知。 應用程式應該使用 getsockopt 來擷取套接字系結至本機地址之後SO_MAX_MSG_SIZE的值。 |
|
通訊協定是訊息導向的,但可能傳輸的訊息大小沒有上限。 |
dwProviderReserved
類型: DWORD
保留供服務提供者使用。
szProtocol[WSAPROTOCOL_LEN + 1]
類型: TCHAR[WSAPROTOCOL_LEN+1]
字元陣列,其中包含人類可讀取的名稱,可識別通訊協定,例如 “MSAFD Tcpip [UDP/IP]”。 允許的最大字元數是WSAPROTOCOL_LEN,定義為 255。
備註
注意
winsock2.h 標頭會將WSAPROTOCOL_INFO定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
標頭 | winsock2.h |