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 頭檔中。

可以取得下列值。

意義
XP1_CONNECTIONLESS
0x00000001
提供無連線 (數據報) 服務。 如果未設定,通訊協定支援連線導向數據傳輸。
XP1_GUARANTEED_DELIVERY
0x00000002
保證傳送的所有數據都會到達預定的目的地。
XP1_GUARANTEED_ORDER
0x00000004
保證數據只會依傳送的順序抵達,而且不會重複。 此特性不一定表示數據一律會傳遞,但傳遞的任何數據都會依傳送的順序傳遞。
XP1_MESSAGE_ORIENTED
0x00000008
接受訊息界限,與沒有訊息界限概念的數據流導向通訊協定相反。
XP1_PSEUDO_STREAM
0x00000010
訊息導向通訊協定,但所有收據都會忽略訊息界限。 當應用程式不想要通訊協定完成訊息框架時,這會很方便。
XP1_GRACEFUL_CLOSE
0x00000020
支援雙階段 (正常) 關閉。 如果未設定,則只會執行中止關閉。
XP1_EXPEDITED_DATA
0x00000040
支援加速 (緊急) 數據。
XP1_CONNECT_DATA
0x00000080
支援連接數據。
XP1_DISCONNECT_DATA
0x00000100
支援中斷連線數據。
XP1_SUPPORT_BROADCAST
0x00000200
支援廣播機制。
XP1_SUPPORT_MULTIPOINT
0x00000400
支援多點或多播機制。 控件和數據平面屬性如下所示。
XP1_MULTIPOINT_CONTROL_PLANE
0x00000800
指出控制平面是根目錄 (值 = 1) 或非根 (值 = 0) 。
XP1_MULTIPOINT_DATA_PLANE
0x00001000
指出數據平面的根目錄 (值 = 1) 或非根 (值 = 0) 。
XP1_QOS_SUPPORTED
0x00002000
支援服務品質要求。
XP1_INTERRUPT
位是保留的。
XP1_UNI_SEND
0x00008000
通訊協議在傳送方向中是單向的。
XP1_UNI_RECV
0x00010000
通訊協定是正向的單向通訊協定。
XP1_IFS_HANDLES
0x00020000
提供者傳回的套接字描述元是操作系統可安裝文件系統 (IFS) 句柄。
XP1_PARTIAL_MESSAGE
0x00040000
WSASendWSASendTo 支援MSG_PARTIAL旗標。
XP1_SAN_SUPPORT_SDP
0x00080000
通訊協定提供 SAN 的支援。

Windows 7 和 Windows Server 2008 R2 支援此值。

 
注意 只能設定其中一個XP1_UNI_SEND或XP1_UNI_RECV值。 如果通訊協定可以雙向使用,則應該使用兩 個WSAPROTOCOL_INFOW 結構。 當兩個位都未設定時,通訊協定會被視為雙向。
 

dwServiceFlags2

類型: DWORD

保留給其他通訊協定屬性定義。

dwServiceFlags3

類型: DWORD

保留給其他通訊協定屬性定義。

dwServiceFlags4

類型: DWORD

保留給其他通訊協定屬性定義。

dwProviderFlags

類型: DWORD

一組旗標,提供 Winsock 目錄中如何表示此通訊協議的資訊。 此成員的可能值定義於 Winsock2.h 頭檔中。

可以取得下列旗標值。

意義
PFL_MULTIPLE_PROTO_ENTRIES
0x00000001
表示這是指定提供者中單一通訊協定 (的兩個或多個專案之一,) 能夠實作多個行為。 其中一個範例是SPX,在接收端上,其行為可以是訊息導向或數據流導向通訊協定。
PFL_RECOMMENDED_PROTO_ENTRY
0x00000002
表示這是可實作多個行為的通訊協議建議或最常使用的專案。
PFL_HIDDEN
0x00000004
由提供者設定,以向 Ws2_32.dll 指出 WSAEnumProtocols 所產生的結果緩衝區中不應該傳回此通訊協定。 很明顯地,Windows Sockets 2 應用程式應該永遠不會看到已設定此位的專案。
PFL_MATCHES_PROTOCOL_ZERO
0x00000008
表示套接字WSASocket 通訊協定參數中的零值符合此通訊協議專案。
PFL_NETWORKDIRECT_PROVIDER
0x00000010
由提供者設定,表示支援網路直接存取。

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_INETPF_INET) ,因此可以使用任一個常數。

下表列出位址系列常見的值,但可能有許多其他值。

iAddressFamily 意義
AF_INET
2
因特網通訊協定第 4 版 (IPv4) 位址系列。
AF_IPX
6
IPX/SPX 位址系列。 只有在安裝 NWLink IPX/SPX NetBIOS 相容傳輸通訊協定時,才支援此位址系列。

Windows Vista 和更新版本不支援此位址系列。

AF_APPLETALK
16
AppleTalk 位址系列。 只有在安裝 AppleTalk 通訊協定時,才支援此位址系列。

Windows Vista 和更新版本不支援此位址系列。

AF_NETBIOS
17
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 程式設計介面。

AF_INET6
23
因特網通訊協定第 6 版 (IPv6) 位址系列。
AF_IRDA
26
IrDA (IrDA) 位址系列。

只有在計算機已安裝基礎結構埠和驅動程式時,才支援此位址系列。

AF_BTH
32
藍牙位址系列。

如果計算機已安裝藍牙適配卡和驅動程式,Windows XP 上的SP2或更新版本支援此位址系列。

iMaxSockAddr

類型: int

最大地址長度,以位元組為單位。

iMinSockAddr

類型: int

最小位址長度,以位元組為單位。

iSocketType

類型: int

要當做套接字類型參數傳遞至 套接字WSASocket 函式的值,以便開啟此通訊協定的套接字。 套接字類型的可能值定義在 Winsock2.h 頭檔中。

下表列出 Windows Sockets 2 支援的 iSocketType 成員可能值:

iSocketType 意義
SOCK_STREAM
1
套接字類型,提供具有 OOB 數據傳輸機制的循序、可靠、雙向、以連線為基礎的位元組數據流。 此套接字類型會針對因特網位址系列 (AF_INET 或AF_INET6) 使用传输控制通讯协议 (TCP) 。
SOCK_DGRAM
2
支援數據報的套接字類型,這些數據報是無連接、不可靠的固定 (通常很小) 最大長度。 此套接字類型會針對因特網位址系列 (AF_INET 或AF_INET6) 使用用户数据报通讯协议 (UDP) 。
SOCK_RAW
3
提供原始套接字的套接字類型,可讓應用程式操作下一層通訊協議標頭。 若要操作 IPv4 標頭,必須在套接字上設定 IP_HDRINCL 套接字選項。 若要操作 IPv6 標頭,必須在套接字上設定 IPV6_HDRINCL 套接字選項。
SOCK_RDM
4
提供可靠訊息數據報的套接字類型。 此類型的範例是 Windows 中的「實用一般多播」 (PGM) 多播通訊協議實作,通常稱為 可靠的多播程序設計

只有在安裝可靠的多播通訊協定時,才支援此值。

SOCK_SEQPACKET
5
套接字類型,提供以數據報為基礎的虛擬串流封包。

iProtocol

類型: int

要當做 通訊協議 參數傳遞至 套接字WSASocket 函式的值,以便開啟此通訊協定的套接字。 iProtocol 成員的可能選項專屬於指定的位址系列和套接字類型。

在針對 Windows Vista 和更新版本發行的 Windows SDK 上,此成員可以是 Ws2def.h 頭檔中定義之 IPPROTO 列舉類型的其中一個值。 請注意, Ws2def.h 頭文件會自動包含在 Winsock2.h 中,不應該直接使用。

在適用於 Windows Server 2003 和更早版本的平臺 SDK 上, iProtocol 成員的可能值定義在 Winsock2.hWsrm.h 頭檔中。

下表列出 iProtocol 的一般值,但可能有許多其他值。

iProtocol 意義
IPPROTO_ICMP
1
因特網控制訊息通訊協定 (ICMP) 。

Windows XP 和更新版本支援此值。

IPPROTO_IGMP
2
因特網群組管理通訊協定 (IGMP) 。

Windows XP 和更新版本支援此值。

BTHPROTO_RFCOMM
3
藍牙無線電頻率通訊 (藍牙 RFCOMM) 通訊協定。

Windows XP SP2 或更新版本支援此值。

IPPROTO_TCP
6
傳輸控制通訊協定 (TCP) 。
IPPROTO_UDP
17
用戶數據報通訊協定 (UDP) 。
IPPROTO_ICMPV6
58
因特網控制訊息通訊協定第 6 版 (ICMPv6) 。

Windows XP 和更新版本支援此值。

IPPROTO_RM
113
可靠多播的PGM通訊協定。 在針對 Windows Vista 和更新版本發行的 Windows SDK 上,此通訊協定也稱為IPPROTO_PGM

只有在安裝可靠的多播通訊協定時,才支援此值。

iProtocolMaxOffset

類型: int

通訊協議參數的值提供給 socketWSASocket 函式時,可能會新增至 iProtocol 的最大值。 並非所有通訊協議都允許一系列的值。 當這是 iProtocolMaxOffset 為零的情況時。

iNetworkByteOrder

類型: int

目前,這些值是 BIGENDIAN 和 LITTLEENDIAN () 的指令清單常數,分別表示值為 0 和 1 的 big-endian 或 small-endian。

iSecurityScheme

類型: int

如果有任何) ,則採用的安全性配置類型 (。 SECURITY_PROTOCOL_NONE (0) 的值會用於不包含安全性布建的通訊協定。

dwMessageSize

類型: DWORD

通訊協議支援的訊息大小上限,以位元組為單位。 這是可從任何主機本機介面傳送的大小上限。 對於不支援訊息框架的通訊協定,可以傳送至指定地址的實際最大值可能較少。 沒有標準布建可判斷輸入訊息大小上限。 定義下列特殊值。

意義
0
通訊協議是數據流導向的,因此訊息大小的概念並不相關。
0x1
輸出 (傳送) 訊息大小上限取決於基礎網路 MTU (最大大小傳輸單位) ,因此在套接字系結之後才能得知。 應用程式應該使用 getsockopt 來擷取套接字系結至本機地址之後SO_MAX_MSG_SIZE的值。
0xFFFFFFFF
通訊協定是訊息導向的,但可能傳輸的訊息大小沒有上限。

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

另請參閱

WSAEnumProtocols

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFOW

WSASend

WSASendTo

WSASocket

WSCInstallProvider

WSCInstallProvider64_32

WSCUpdateProvider

WSCUpdateProvider32

getsockopt

socket