структура 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). |
|
Поддерживает качество запросов на обслуживание. |
|
Бит зарезервирован. |
|
Протокол является однонаправленным в направлении отправки. |
|
Протокол является однонаправленным в направлении recv. |
|
Дескрипторы сокетов, возвращаемые поставщиком, являются дескрипторами устанавливаемой файловой системы (IFS). |
|
Флаг MSG_PARTIAL поддерживается в WSASend и WSASendTo. |
|
Протокол обеспечивает поддержку 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
Уникальный идентификатор, присвоенный 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 | Значение |
---|---|
|
Семейство адресов IPv4. |
|
Семейство адресов IPX/SPX. Это семейство адресов поддерживается только в том случае, если установлен протокол NWLink IPX/SPX NetBIOS-совместимый транспортный протокол.
Это семейство адресов не поддерживается в Windows Vista и более поздних версиях. |
|
Семейство адресов AppleTalk. Это семейство адресов поддерживается только в том случае, если установлен протокол AppleTalk.
Это семейство адресов не поддерживается в Windows Vista и более поздних версиях. |
|
Семейство адресов 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 и более поздних версиях. |
|
Семейство адресов IPv6. |
|
Семейство адресов Ассоциации инфракрасных данных (IrDA).
Это семейство адресов поддерживается только в том случае, если на компьютере установлены инфракрасный порт и драйвер. |
|
Семейство адресов Bluetooth.
Это семейство адресов поддерживается в Windows XP с пакетом обновления 2 (SP2) или более поздней версии, если на компьютере установлены адаптер Bluetooth и драйвер. |
iMaxSockAddr
Тип: int
Максимальная длина адреса в байтах.
iMinSockAddr
Тип: int
Минимальная длина адреса в байтах.
iSocketType
Тип: int
Значение, передаваемое в качестве параметра типа сокета функции сокета или WSASocket , чтобы открыть сокет для этого протокола. Возможные значения для типа сокета определяются в файле заголовка Winsock2.h .
В следующей таблице перечислены возможные значения элемента iSocketType , поддерживаемого для Windows Sockets 2:
iSocketType | Значение |
---|---|
|
Тип сокета, предоставляющий виртуационные, надежные двусторонние потоки байтов на основе подключения с механизмом передачи данных OOB. Этот тип сокета использует протокол TCP для семейства интернет-адресов (AF_INET или AF_INET6). |
|
Тип сокета, поддерживающий датаграммы, которые представляют собой ненадежные буферы фиксированной (обычно небольшой) максимальной длины. Этот тип сокета использует протокол UDP для семейства интернет-адресов (AF_INET или AF_INET6). |
|
Тип сокета, предоставляющий необработанный сокет, позволяющий приложению управлять следующим заголовком протокола верхнего уровня. Чтобы управлять заголовком IPv4, для сокета необходимо задать параметр сокета IP_HDRINCL . Чтобы управлять заголовком IPv6, для сокета необходимо задать параметр сокета IPV6_HDRINCL . |
|
Тип сокета, предоставляющий надежную датаграмму сообщения. Примером этого типа является реализация протокола прагматической общей многоадресной рассылки (PGM) в Windows, которую часто называют надежным многоадресным программированием.
Это значение поддерживается только в том случае, если установлен надежный протокол многоадресной рассылки. |
|
Тип сокета, предоставляющий пакет псевдопотока на основе датаграмм. |
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 , хотя возможны и многие другие значения.
iProtocolMaxOffset
Тип: int
Максимальное значение, которое может быть добавлено в iProtocol при указании значения параметра протокола в сокет или функцию WSASocket . Не все протоколы допускают диапазон значений. В этом случае значение iProtocolMaxOffset равно нулю.
iNetworkByteOrder
Тип: int
В настоящее время эти значения являются константами манифеста (BIGENDIAN и LITTLEENDIAN), которые указывают на большой эндиан или маленький эндиан со значениями 0 и 1 соответственно.
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 как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | winsock2.h |