структура 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
Протокол является однонаправленным в направлении recv.
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 Sockets 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 представляет многоуровневый протокол, в котором в качестве верхнего и нижнего краев используется spi Windows Sockets 2. Если длина цепочки равна 1, эта запись представляет базовый протокол, идентификатор записи каталога которого находится в элементе dwCatalogEntryIdструктуры WSAPROTOCOL_INFO . Если длина цепочки больше 1, эта запись представляет цепочку протоколов, состоящую из одного или нескольких многоуровневых протоколов поверх базового протокола. Соответствующие идентификаторы записи каталога находятся в массиве ProtocolChain.ChainEntries, начиная с многоуровневого протокола в верхней части (нулевого элемента в массиве ProtocolChain.ChainEntries) и заканчивая базовым протоколом. Дополнительные сведения о цепочках протоколов см. в спецификации интерфейса поставщика служб Windows Sockets 2.

iVersion

Тип: int

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

iAddressFamily

Тип: int

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

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

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

В настоящее время поддерживаются значения AF_INET или AF_INET6, которые являются форматами семейств адресов Интернета для IPv4 и IPv6. Другие варианты семейства адресов (например, AF_NETBIOS для использования с NetBIOS) поддерживаются, если установлен поставщик службы Windows Sockets для семейства адресов. Обратите внимание, что значения для семейства адресов AF_ и констант семейства PF_ протоколов идентичны (например, AF_INET и PF_INET), поэтому можно использовать либо константу.

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

iAddressFamily Значение
AF_INET
2
Семейство адресов 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
Семейство адресов 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 Sockets 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 относятся к указанному семейству адресов и типу сокета.

На Windows SDK, выпущенном для Windows Vista и более поздних версий, этот элемент может быть одним из значений из типа перечисления IPPROTO, определенного в файле заголовка 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
Протокол ICMPv6.

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

IPPROTO_RM
113
Протокол PGM для надежной многоадресной рассылки. На Windows SDK, выпущенном для 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 (единица передачи максимального размера) и, следовательно, не может быть известен до тех пор, пока не будет привязан сокет. Приложения должны использовать метод 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 как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть winsock2.h

См. также раздел

WSAEnumProtocols

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFOW

WSASend

WSASendTo

WSASocket

WSCInstallProvider

WSCInstallProvider64_32

WSCUpdateProvider

WSCUpdateProvider32

getsockopt

Сокета