estrutura WSAPROTOCOL_INFOA (winsock2.h)
A estrutura WSAPROTOCOL_INFO é usada para armazenar ou recuperar informações completas para um determinado protocolo.
Sintaxe
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;
Membros
dwServiceFlags1
Tipo: DWORD
Uma máscara de bits que descreve os serviços fornecidos pelo protocolo. Os valores possíveis para esse membro são definidos no arquivo de cabeçalho Winsock2.h .
Os valores a seguir são possíveis.
Valor | Significado |
---|---|
|
Fornece serviço sem conexão (datagram). Se não estiver definido, o protocolo oferecerá suporte à transferência de dados orientada à conexão. |
|
Garante que todos os dados enviados cheguem ao destino pretendido. |
|
Garante que os dados só cheguem na ordem em que foram enviados e que não sejam duplicados. Essa característica não significa necessariamente que os dados sejam sempre entregues, mas que todos os dados entregues sejam entregues na ordem em que foram enviados. |
|
Respeita os limites da mensagem, em vez de um protocolo orientado a fluxo em que não há nenhum conceito de limites de mensagem. |
|
Um protocolo orientado a mensagens, mas os limites de mensagem são ignorados para todos os recibos. Isso é conveniente quando um aplicativo não deseja que o enquadramento de mensagens seja feito pelo protocolo. |
|
Dá suporte ao fechamento em duas fases (normal). Se não estiver definido, somente fechamentos abortivos serão executados. |
|
Dá suporte a dados agilizados (urgentes). |
|
Dá suporte a dados de conexão. |
|
Dá suporte à desconexão de dados. |
|
Dá suporte a um mecanismo de difusão. |
|
Dá suporte a um mecanismo multipoint ou multicast. Os atributos de controle e plano de dados são indicados abaixo. |
|
Indica se o plano de controle está com raiz (valor = 1) ou não gerado (valor = 0). |
|
Indica se o plano de dados está com raiz (valor = 1) ou não gerado (valor = 0). |
|
Dá suporte à qualidade das solicitações de serviço. |
|
O bit é reservado. |
|
O protocolo é unidirecional na direção de envio. |
|
O protocolo é unidirecional na direção do recv. |
|
Os descritores de soquete retornados pelo provedor são identificadores IFS (Sistema de Arquivos Instalável) do sistema operacional. |
|
O sinalizador MSG_PARTIAL tem suporte no WSASend e no WSASendTo. |
|
O protocolo fornece suporte para SAN.
Esse valor tem suporte no Windows 7 e no Windows Server 2008 R2. |
dwServiceFlags2
Tipo: DWORD
Reservado para definições adicionais de atributo de protocolo.
dwServiceFlags3
Tipo: DWORD
Reservado para definições adicionais de atributo de protocolo.
dwServiceFlags4
Tipo: DWORD
Reservado para definições adicionais de atributo de protocolo.
dwProviderFlags
Tipo: DWORD
Um conjunto de sinalizadores que fornece informações sobre como esse protocolo é representado no catálogo do Winsock. Os valores possíveis para esse membro são definidos no arquivo de cabeçalho Winsock2.h .
Os valores de sinalizador a seguir são possíveis.
Valor | Significado |
---|---|
|
Indica que essa é uma das duas ou mais entradas para um único protocolo (de um determinado provedor) que é capaz de implementar vários comportamentos. Um exemplo disso é o SPX que, no lado receptor, pode se comportar como um protocolo orientado a mensagens ou orientado a fluxo. |
|
Indica que essa é a entrada recomendada ou usada com mais frequência para um protocolo capaz de implementar vários comportamentos. |
|
Definido por um provedor para indicar ao Ws2_32.dll que esse protocolo não deve ser retornado no buffer de resultados gerado por WSAEnumProtocols. Obviamente, um aplicativo do Windows Sockets 2 nunca deve ver uma entrada com esse conjunto de bits. |
|
Indica que um valor igual a zero no parâmetro de protocolo de soquete ou WSASocket corresponde a essa entrada de protocolo. |
|
Definido por um provedor para indicar suporte para acesso direto à rede.
Esse valor tem suporte no Windows 7 e no Windows Server 2008 R2. |
ProviderId
Tipo: GUID
Um GUID (identificador global exclusivo) atribuído ao provedor pelo fornecedor do provedor de serviços. Esse valor é útil para instâncias em que mais de um provedor de serviços é capaz de implementar um protocolo específico. Um aplicativo pode usar o membro ProviderId para distinguir entre provedores que, de outra forma, podem ser indistinguíveis.
dwCatalogEntryId
Tipo: DWORD
Um identificador exclusivo atribuído pelo WS2_32.DLL para cada estrutura WSAPROTOCOL_INFO .
ProtocolChain
Tipo: WSAPROTOCOLCHAIN
A estrutura WSAPROTOCOLCHAIN associada ao protocolo. Se o comprimento da cadeia for 0, essa entrada WSAPROTOCOL_INFO representará um protocolo em camadas que tem o SPI do Windows Sockets 2 como bordas superior e inferior. Se o comprimento da cadeia for igual a 1, essa entrada representará um protocolo base cujo identificador de Entrada de Catálogo está no membro dwCatalogEntryId da estrutura WSAPROTOCOL_INFO . Se o comprimento da cadeia for maior que 1, essa entrada representará uma cadeia de protocolo que consiste em um ou mais protocolos em camadas sobre um protocolo base. Os identificadores de Entrada de Catálogo correspondentes estão na matriz ProtocolChain.ChainEntries começando com o protocolo em camadas na parte superior (o elemento zero na matriz ProtocolChain.ChainEntries) e terminando com o protocolo base. Consulte a especificação interface do provedor de serviços do Windows Sockets 2 para obter mais informações sobre cadeias de protocolo.
iVersion
Tipo: int
O identificador de versão do protocolo.
iAddressFamily
Tipo: int
Um valor a ser passado como o parâmetro da família de endereços para a função soquete ou WSASocket para abrir um soquete para esse protocolo. Esse valor também define exclusivamente a estrutura de um endereço de protocolo para um sockaddr usado pelo protocolo.
Na SDK do Windows lançada para Windows Vista e posterior, os valores possíveis para a família de endereços são definidos no arquivo de cabeçalho Ws2def.h. Observe que o arquivo de cabeçalho Ws2def.h é incluído automaticamente no Winsock2.h e nunca deve ser usado diretamente.
Em versões do SDK da Plataforma para Windows Server 2003 e anteriores, os valores possíveis para a família de endereços são definidos no arquivo de cabeçalho Winsock2.h .
Os valores com suporte no momento são AF_INET ou AF_INET6, que são os formatos de família de endereços da Internet para IPv4 e IPv6. Outras opções para família de endereços (AF_NETBIOS para uso com NetBIOS, por exemplo) têm suporte se um provedor de serviços do Windows Sockets para a família de endereços estiver instalado. Observe que os valores para a família de endereços AF_ e PF_ constantes da família de protocolos são idênticos (por exemplo, AF_INET e PF_INET), portanto, qualquer constante pode ser usada.
A tabela a seguir lista valores comuns para a família de endereços, embora muitos outros valores sejam possíveis.
iAddressFamily | Significado |
---|---|
|
A família de endereços IPv4 (Protocolo de Internet versão 4). |
|
A família de endereços IPX/SPX. Essa família de endereços só terá suporte se o protocolo NWLink IPX/SPX NetBIOS Compatible Transport estiver instalado.
Não há suporte para essa família de endereços no Windows Vista e posterior. |
|
A família de endereços do AppleTalk. Essa família de endereços só terá suporte se o protocolo AppleTalk estiver instalado.
Não há suporte para essa família de endereços no Windows Vista e posterior. |
|
A família de endereços NetBIOS. Essa família de endereços só terá suporte se o provedor do Windows Sockets para NetBIOS estiver instalado.
O provedor do Windows Sockets para NetBIOS tem suporte em versões de 32 bits do Windows. Esse provedor é instalado por padrão em versões de 32 bits do Windows. O provedor do Windows Sockets para NetBIOS não tem suporte em versões de 64 bits do Windows, incluindo Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 ou Windows XP. O provedor do Windows Sockets para NetBIOS dá suporte apenas a soquetes em que o parâmetro de tipo é definido como SOCK_DGRAM. O provedor do Windows Sockets para NetBIOS não está diretamente relacionado à interface de programação NetBIOS . Não há suporte para a interface de programação NetBIOS no Windows Vista, no Windows Server 2008 e posterior. |
|
A família de endereços IPv6 (Internet Protocol versão 6). |
|
A família de endereços da IrDA (Associação de Dados Infravermelhos).
Essa família de endereços só terá suporte se o computador tiver uma porta infravermelha e um driver instalados. |
|
A família de endereços Bluetooth.
Essa família de endereços terá suporte no Windows XP com SP2 ou posterior se o computador tiver um adaptador Bluetooth e um driver instalados. |
iMaxSockAddr
Tipo: int
O comprimento máximo do endereço, em bytes.
iMinSockAddr
Tipo: int
O comprimento mínimo do endereço, em bytes.
iSocketType
Tipo: int
Um valor a ser passado como o parâmetro de tipo de soquete para a função socket ou WSASocket para abrir um soquete para esse protocolo. Os valores possíveis para o tipo de soquete são definidos no arquivo de cabeçalho Winsock2.h .
A tabela a seguir lista os valores possíveis para o membro iSocketType com suporte para Windows Sockets 2:
Isockettype | Significado |
---|---|
|
Um tipo de soquete que fornece fluxos de bytes sequenciados, confiáveis, bidirecionais e baseados em conexão com um mecanismo de transmissão de dados OOB. Esse tipo de soquete usa o protocolo TCP para a família de endereços da Internet (AF_INET ou AF_INET6). |
|
Um tipo de soquete que dá suporte a datagramas, que são buffers sem conexão e não confiáveis de um comprimento máximo fixo (normalmente pequeno). Esse tipo de soquete usa o UDP (Protocolo de Datagrama do Usuário) para a família de endereços da Internet (AF_INET ou AF_INET6). |
|
Um tipo de soquete que fornece um soquete bruto que permite que um aplicativo manipule o próximo cabeçalho de protocolo de camada superior. Para manipular o cabeçalho IPv4, a opção de soquete IP_HDRINCL deve ser definida no soquete. Para manipular o cabeçalho IPv6, a opção de soquete IPV6_HDRINCL deve ser definida no soquete. |
|
Um tipo de soquete que fornece um datagrama de mensagem confiável. Um exemplo desse tipo é a implementação de protocolo multicast PGM (Pragmática Geral Multicast) no Windows, geralmente conhecida como programação multicast confiável.
Esse valor só terá suporte se o Reliable Multicast Protocol estiver instalado. |
|
Um tipo de soquete que fornece um pacote pseudo-fluxo com base em datagramas. |
iProtocol
Tipo: int
Um valor a ser passado como o parâmetro de protocolo para a função soquete ou WSASocket para abrir um soquete para esse protocolo. As opções possíveis para o membro iProtocol são específicas para a família de endereços e o tipo de soquete especificados.
No SDK do Windows lançado para Windows Vista e posterior, esse membro pode ser um dos valores do tipo de enumeração IPPROTO definido no arquivo de cabeçalho Ws2def.h. Observe que o arquivo de cabeçalho Ws2def.h é incluído automaticamente em Winsock2.h e nunca deve ser usado diretamente.
Em versões do SDK da Plataforma para Windows Server 2003 e anteriores, os valores possíveis para o membro iProtocol são definidos nos arquivos de cabeçalho Winsock2.h e Wsrm.h .
A tabela a seguir lista valores comuns para o iProtocol , embora muitos outros valores sejam possíveis.
iProtocolMaxOffset
Tipo: int
O valor máximo que pode ser adicionado ao iProtocol ao fornecer um valor para o parâmetro de protocolo para a função soquete ou WSASocket . Nem todos os protocolos permitem um intervalo de valores. Quando esse é o caso , iProtocolMaxOffset é zero.
iNetworkByteOrder
Tipo: int
Atualmente, esses valores são constantes de manifesto (BIGENDIAN e LITTLEENDIAN) que indicam big-endian ou little-endian com os valores 0 e 1, respectivamente.
iSecurityScheme
Tipo: int
O tipo de esquema de segurança empregado (se houver). Um valor de SECURITY_PROTOCOL_NONE (0) é usado para protocolos que não incorporam provisionamentos de segurança.
dwMessageSize
Tipo: DWORD
O tamanho máximo da mensagem, em bytes, compatível com o protocolo. Esse é o tamanho máximo que pode ser enviado de qualquer uma das interfaces locais do host. Para protocolos que não dão suporte ao enquadramento de mensagens, o máximo real que pode ser enviado para um determinado endereço pode ser menor. Não há nenhuma provisão padrão para determinar o tamanho máximo da mensagem de entrada. Os valores especiais a seguir são definidos.
Valor | Significado |
---|---|
|
O protocolo é orientado a fluxo e, portanto, o conceito de tamanho da mensagem não é relevante. |
|
O tamanho máximo da mensagem de saída (envio) depende da MTU de rede subjacente (unidade de transmissão de tamanho máximo) e, portanto, não pode ser conhecido até que um soquete seja associado. Os aplicativos devem usar getsockopt para recuperar o valor de SO_MAX_MSG_SIZE depois que o soquete tiver sido associado a um endereço local. |
|
O protocolo é orientado a mensagens, mas não há limite máximo para o tamanho das mensagens que podem ser transmitidas. |
dwProviderReserved
Tipo: DWORD
Reservado para uso por provedores de serviços.
szProtocol[WSAPROTOCOL_LEN + 1]
Tipo: TCHAR[WSAPROTOCOL_LEN+1]
Uma matriz de caracteres que contém um nome legível para humanos que identifica o protocolo, por exemplo, "MSAFD Tcpip [UDP/IP]". O número máximo de caracteres permitido é WSAPROTOCOL_LEN, que é definido como 255.
Comentários
Observação
O cabeçalho winsock2.h define WSAPROTOCOL_INFO como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Cabeçalho | winsock2.h |