Поделиться через


структура WSAPROTOCOL_INFOW (winsock2.h)

Структура WSAPROTOCOL_INFOW используется для хранения или получения полных сведений для заданного протокола. Имя протокола представлено в виде массива символов Юникода.

Синтаксис

typedef struct _WSAPROTOCOL_INFOW {
  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;
  WCHAR            szProtocol[WSAPROTOCOL_LEN + 1];
} WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW;

Члены

dwServiceFlags1

Тип: DWORD

Битовая маска, описывающая службы, предоставляемые протоколом. Возможные значения этого элемента определяются в файле заголовка Winsock2.h.

Возможны следующие значения.

Ценность Значение
XP1_CONNECTIONLESS
0x00000001
Предоставляет службу без подключения (datagram). Если этот параметр не задан, протокол поддерживает передачу данных, ориентированных на подключение.
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
Флаг MSG_PARTIAL поддерживается в WSASend и WSASendTo.
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 2 никогда не должно видеть запись с этим битом.
PFL_MATCHES_PROTOCOL_ZERO
0x00000008
Указывает, что значение нуля в параметре протокола сокет а или WSASocket соответствует этой записи протокола.
PFL_NETWORKDIRECT_PROVIDER
0x00000010
Задает поставщик, чтобы указать поддержку прямого доступа к сети.

Это значение поддерживается в Windows 7 и Windows Server 2008 R2.

ProviderId

Тип: GUID

Глобальный уникальный идентификатор (GUID), назначенный поставщику услуг поставщиком услуг. Это значение полезно для экземпляров, где несколько поставщиков услуг могут реализовать определенный протокол. Приложение может использовать элемент ProviderId, чтобы различать поставщиков, которые в противном случае могут быть неотличимыми.

dwCatalogEntryId

Тип: DWORD

Уникальный идентификатор, назначенный WS2_32.DLL для каждой WSAPROTOCOL_INFO структуры.

ProtocolChain

Тип: WSAPROTOCOLCHAIN

Структура WSAPROTOCOLCHAIN, связанная с протоколом, . Если длина цепочки равна 0, эта запись WSAPROTOCOL_INFO представляет многоуровневый протокол, который содержит сокеты Windows 2 SPI как его верхние, так и нижние края. Если длина цепочки равна 1, эта запись представляет базовый протокол, идентификатор записи каталога которого находится в элементе dwCatalogEntryId структуры WSAPROTOCOL_INFO. Если длина цепочки превышает 1, эта запись представляет цепочку протоколов, состоящую из одного или нескольких многоуровневых протоколов поверх базового протокола. Соответствующие идентификаторы записи каталога находятся в массиве ProtocolChain.ChainEntries, начиная с многоуровневого протокола в верхней части (нулевой элемент массива ProtocolChain.ChainEntries) и заканчивая базовым протоколом. Дополнительные сведения о цепочках протоколов см. в спецификации интерфейса поставщика служб Windows Sockets 2.

iVersion

Тип: int

Идентификатор версии протокола.

iAddressFamily

Тип: int

Значение, передаваемое в качестве параметра семейства адресов в сокет или функцию WSASocket, чтобы открыть сокет для этого протокола. Это значение также однозначно определяет структуру адреса протокола для sockaddr, используемой протоколом.

В пакете SDK для Windows, выпущенном для Windows Vista и более поздних версий, возможные значения семейства адресов определяются в файле заголовка Ws2def.h. Обратите внимание, что файл заголовка ws2def.h Ws2def.h автоматически включается в Winsock2.hи никогда не следует использовать напрямую.

В версиях пакета SDK платформы для Windows Server 2003 и более ранних версий возможные значения семейства адресов определяются в файле заголовка Winsock2.h.

В настоящее время поддерживаются значения AF_INET или AF_INET6, которые являются форматами семейства адресов Интернета для IPv4 и IPv6. Другие варианты семейства адресов (AF_NETBIOS для использования с NetBIOS, например), поддерживаются, если установлен поставщик служб сокетов Windows для семейства адресов. Обратите внимание, что значения для семейства адресов AF_ и констант семейства протоколов PF_ идентичны (например, AF_INET и PF_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. Это семейство адресов поддерживается только в том случае, если установлен поставщик сокетов Windows для NetBIOS.

Поставщик сокетов Windows для NetBIOS поддерживается в 32-разрядных версиях Windows. Этот поставщик устанавливается по умолчанию в 32-разрядных версиях Windows.

Поставщик сокетов Windows для NetBIOS не поддерживается в 64-разрядных версиях windows, включая Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 или Windows XP.

Поставщик сокетов Windows для NetBIOS поддерживает только сокеты, в которых для параметра типа задано значение SOCK_DGRAM.

Поставщик сокетов Windows для NetBIOS напрямую не связан с интерфейсом программирования NetBIOS. Интерфейс программирования NetBIOS не поддерживается в Windows Vista, Windows Server 2008 и более поздних версиях.

AF_INET6
23
Семейство адресов протокола Интернета версии 6 (IPv6).
AF_IRDA
26
Семейство адресов связи с инфракрасным данными (IrDA).

Это семейство адресов поддерживается только в том случае, если на компьютере установлен инфракрасный порт и драйвер.

AF_BTH
32
Семейство адресов Bluetooth.

Это семейство адресов поддерживается в Windows XP с пакетом обновления 2 (SP2) или более поздней версии, если на компьютере установлен адаптер Bluetooth и драйвер.

iMaxSockAddr

Тип: int

Максимальная длина адреса в байтах.

iMinSockAddr

Тип: int

Минимальная длина адреса в байтах.

iSocketType

Тип: int

Значение, передаваемое в качестве параметра типа сокета или функцию WSASocket, чтобы открыть сокет для этого протокола. Возможные значения для типа сокета определяются в файле заголовка Winsock2.h.

В следующей таблице перечислены возможные значения для элемента iSocketType, поддерживаемого для сокетов Windows 2:

iSocketType Значение
SOCK_STREAM
1
Тип сокета, предоставляющий последовательные, надежные двусторонние потоки байтов на основе подключения с механизмом передачи данных OOB. Этот тип сокета использует протокол TCP для семейства адресов Интернета (AF_INET или AF_INET6).
SOCK_DGRAM
2
Тип сокета, поддерживающий диаграммы данных без подключения, ненадежные буферы фиксированной (обычно небольшой) максимальной длины. Этот тип сокета использует протокол пользовательской диаграммы данных (UDP) для семейства адресов Интернета (AF_INET или AF_INET6).
SOCK_RAW
3
Тип сокета, предоставляющий необработанный сокет, позволяющий приложению управлять следующим заголовком протокола верхнего уровня. Чтобы управлять заголовком IPv4, необходимо задать параметр сокета IP_HDRINCL на сокете. Чтобы управлять заголовком IPv6, необходимо задать параметр сокета IPV6_HDRINCL на сокете.
SOCK_RDM
4
Тип сокета, предоставляющий надежную диаграмму данных сообщения. Примером этого типа является реализация многоадресной многоадресной рассылки (PGM) прагматичной многоадресной рассылки в Windows, часто называемая надежным многоадресным программированием.

Это значение поддерживается только в том случае, если установлен надежный протокол многоадресной рассылки.

SOCK_SEQPACKET
5
Тип сокета, предоставляющий псевдопотоковый пакет на основе диаграмм данных.

iProtocol

Тип: int

Значение, передаваемое в качестве параметра протокола в сокет или функцию WSASocket, чтобы открыть сокет для этого протокола. Возможные варианты для элемента iProtocol относятся к указанному семейству адресов и типу сокета.

В пакете SDK для Windows SDK, выпущенном для Windows Vista и более поздних версий, этот элемент может быть одним из значений из типа перечисления IPPROTO, определенно го в файле заголовка Ws2def.h. Обратите внимание, что файл заголовка ws2def.h Ws2def.h автоматически включается в Winsock2.hи никогда не следует использовать напрямую.

В версиях пакета SDK для платформы для Windows Server 2003 и более ранних версий возможные значения для элемента iProtocol определяются в Winsock2.h и файлах заголовков Wsrm.h.

В приведенной ниже таблице перечислены распространенные значения iProtocol хотя и многие другие значения возможны.

iProtocol Значение
IPPROTO_ICMP
1
Протокол сообщений управления Интернетом (ICMP).

Это значение поддерживается в Windows XP и более поздних версиях.

IPPROTO_IGMP
2
Протокол управления группами Интернета (IGMP).

Это значение поддерживается в Windows XP и более поздних версиях.

BTHPROTO_RFCOMM
3
Протокол Bluetooth Radio Frequency Communications (Bluetooth RFCOMM).

Это значение поддерживается в Windows XP с пакетом обновления 2 (SP2) или более поздней версии.

IPPROTO_TCP
6
Протокол управления передачей (TCP).
IPPROTO_UDP
17
Протокол пользовательской диаграммы данных (UDP).
IPPROTO_ICMPV6
58
Протокол 6 протокола управления Интернетом (ICMPv6).

Это значение поддерживается в Windows XP и более поздних версиях.

IPPROTO_RM
113
Протокол PGM для надежной многоадресной рассылки. В пакете SDK для Windows, выпущенном для Windows Vista и более поздних версий, этот протокол также называется IPPROTO_PGM.

Это значение поддерживается только в том случае, если установлен надежный протокол многоадресной рассылки.

iProtocolMaxOffset

Тип: int

Максимальное значение, которое можно добавить в элемент iProtocol при предоставлении значения параметра протокола сокета и WSASocket. Не все протоколы разрешают диапазон значений. Если это так, iProtocolMaxOffset равно нулю.

iNetworkByteOrder

Тип: int

В настоящее время эти значения являются константами манифеста (BIGENDIAN и LITTLEENDIAN), которые указывают либо большой эндиан, либо маленький эндиан со значениями 0 и 1 соответственно.

iSecurityScheme

Тип: int

Тип используемой схемы безопасности (если таковой есть). Значение SECURITY_PROTOCOL_NONE (0) используется для протоколов, которые не включают положения о безопасности.

dwMessageSize

Тип: DWORD

Максимальный размер сообщения в байтах, поддерживаемый протоколом. Это максимальный размер, который можно отправить из любого локального интерфейса узла. Для протоколов, которые не поддерживают обрамления сообщений, фактическое максимальное значение, которое может быть отправлено на заданный адрес, может быть меньше. Стандартная подготовка для определения максимального размера входящего сообщения отсутствует. Определены следующие специальные значения.

Ценность Значение
0
Протокол ориентирован на поток, поэтому концепция размера сообщения не относится.
0x1
Максимальный размер исходящего (отправки) сообщения зависит от базового сетевого MTU (единица передачи максимального размера) и поэтому не может быть известно до тех пор, пока не будет привязан сокет. Приложения должны использовать получает для получения значения SO_MAX_MSG_SIZE после привязки сокета к локальному адресу.
0xFFFFFFFF
Протокол ориентирован на сообщения, но не ограничивается максимальным размером передаваемых сообщений.

dwProviderReserved

Тип: DWORD

Зарезервировано для использования поставщиками услуг.

szProtocol[WSAPROTOCOL_LEN + 1]

Тип: WCHAR[WSAPROTOCOL_LEN+1]

Массив символов Юникода, содержащий удобочитаемое пользователем имя, определяющее протокол, например MSAFD Tcpip [UDP/IP]. Максимально допустимое число символов — WSAPROTOCOL_LEN, которое определяется как 255.

Замечания

Заметка

Заголовок winsock2.h определяет WSAPROTOCOL_INFO как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
заголовка winsock2.h

См. также

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFO

WSASend

WSASendTo

WSASocket

WSCEnumProtocols

WSCEnumProtocols32

getsockopt

сокета