Opções de soquete IPPROTO_IP

As tabelas a seguir descrevem opções de soquete IPPROTO_IP que se aplicam a soquetes criados para a família de endereços IPv4 (AF_INET). Consulte as páginas de referência das funções getsockopt e setsockopt para obter mais informações sobre como obter e definir opções de soquete.

Para enumerar protocolos e descobrir propriedades com suporte para cada protocolo instalado, use a função WSAEnumProtocols, WSCEnumProtocols ou WSCEnumProtocols32.

Algumas opções de soquete exigem mais explicações do que essas tabelas podem transmitir. Essas opções contêm links para páginas adicionais.

Opções

Opção Obter Definir Tipo Optval Descrição
IP_ADD_IFLIST sim DWORD (IF_INDEX) Adiciona um índice de interface ao IFLIST associado à opção IP_IFLIST.
IP_ADD_MEMBERSHIP sim ip_mreq Junte o soquete ao grupo multicast fornecido na interface especificada.
IP_ADD_SOURCE_MEMBERSHIP sim ip_mreq_source Junte-se no grupo multicast fornecido na interface indicada e aceite os dados provenientes do endereço de origem informado.
IP_BLOCK_SOURCE sim ip_mreq_source Remove a fonte indicada como remetente para o grupo multicast e a interface fornecidos.
IP_DEL_IFLIST sim DWORD (IF_INDEX) Remove um índice de interface do IFLIST associado à opção IP_IFLIST. As entradas podem ser removidas somente pelo aplicativo, portanto, esteja ciente de que as entradas podem ficar obsoletas quando uma interface for removida.
IP_DONTFRAGMENT sim sim DWORD (booleano) Indica que os dados não devem ser fragmentados, independentemente da MTU local. Válido apenas para protocolos orientados a mensagens. Os provedores TCP/IP da Microsoft respeitam essa opção para UDP e ICMP.
IP_DROP_MEMBERSHIP sim ip_mreq Deixa o grupo multicast especificado da interface especificada. Os provedores de serviços devem oferecer suporte a essa opção quando houver suporte para multicast. O suporte é indicado na estrutura WSAPROTOCOL_INFO retornado pela função WSAEnumProtocols chamada por: XPI_SUPPORT_MULTIPOINT=1, XP1_MULTIPOINT_CONTROL_PLANE=0, XP1_MULTIPOINT_DATA_PLANE=0.
IP_DROP_SOURCE_MEMBERSHIP sim ip_mreq_source Remove a associação ao grupo multicast, interface e endereço de origem fornecidos.
IP_GET_IFLIST sim DWORD[] (IF_INDEX[]) Obtém o IFLIST atual associado à opção IP_IFLIST. Retorna um erro se IP_IFLIST não estiver habilitado.
IP_HDRINCL sim sim DWORD (booleano) Quando definido como TRUE indica que o aplicativo fornece o cabeçalho IP. Aplica-se apenas a soquetes SOCK_RAW. O provedor de serviços TCP/IP pode definir o campo ID, se o valor fornecido pelo aplicativo for zero. A opção IP_HDRINCL é aplicada somente ao tipo de protocolo SOCK_RAW. Um provedor de serviços TCP/IP que oferece suporte a SOCK_RAW também deve oferecer suporte a IP_HDRINCL.
IP_IFLIST sim sim DWORD (booleano) Obtém ou define o estado IP_IFLIST do soquete. Quando essa opção é definida como true, a recepção de datagrama é restrita para as interfaces que estão no IFLIST. Os datagramas recebidos em qualquer outra interface são ignorados. IFLIST começa vazio. Use IP_ADD_IFLIST e IP_DEL_IFLIST para editar o IFLIST.
IP_MTU sim DWORD Obtém a estimativa do sistema de MTU do caminho. O soquete deve estar conectado.
IP_MTU_DISCOVER sim sim DWORD (PMTUD_STATE) Obtém ou define o estado de descoberta de MTU do caminho para o soquete. O valor padrão é IP_PMTUDISC_NOT_SET. Para os soquetes de fluxo, IP_PMTUDISC_NOT_SET e IP_PMTUDISC_DO executarão a descoberta de MTU do caminho. IP_PMTUDISC_DONT e IP_PMTUDISC_PROBE desativarão a descoberta de MTU do caminho. Os soquetes de datagrama, IP_PMTUDISC_DO forçarão todos os pacotes de saída a terem o bit DF definido e uma tentativa de enviar pacotes maiores do que a MTU do caminho resultará em um erro. IP_PMTUDISC_DONT forçará todos os pacotes de saída a ter o bit DF não definido e os pacotes serão fragmentados de acordo com o MTU da interface. IP_PMTUDISC_PROBE forçará todos os pacotes de saída a ter o bit DF definido e uma tentativa de enviar pacotes maiores que o MTU da interface resultará em um erro.
IP_MULTICAST_IF sim sim DWORD Obtém ou define a interface de saída para o envio de tráfego multicast IPv4. Essa opção não altera a interface padrão para receber tráfego multicast IPv4. O valor de entrada para definir essa opção é um endereço IPv4 de 4 bytes na ordem de bytes da rede. Esse parâmetro DWORD também pode ser um índice de interface na ordem de bytes da rede. Qualquer endereço IP no bloco 0.x.x.x (primeiro octeto de 0), exceto o endereço IPv4 0.0.0.0, é tratado como um índice de interface. Um índice de interface é um número de 24 bits e o bloco de endereços IPv4 0.0.0.0/8 não é usado (esse intervalo é reservado). O índice de interface pode ser usado para especificar a interface padrão para o tráfego multicast para IPv4. Se optval for zero, a interface padrão para receber multicast será especificada para enviar tráfego multicast. Ao obter essa opção, o optval retorna o índice da interface padrão atual para o envio de tráfego IPv4 multicast na ordem de bytes do host.
IP_MULTICAST_LOOP sim sim DWORD (booleano) Para um soquete que está associado a um ou mais grupos multicast, isso controla se ele receberá uma cópia dos pacotes de saída enviados a esses grupos multicast por meio da interface multicast selecionada. Por padrão, IP_MULTICAST_LOOP é habilitado (valor 1/TRUE), então os soquetes irão receber pacotes multicast correspondentes enviados pela máquina atual. Desabilitar essa opção (definindo-a como 0/FALSE) significa que esse soquete não receberá multicasts enviados da máquina local, mesmo que o soquete esteja aberto na interface de loopback.

Isso não é compatível com a versão POSIX do IP_MULTICAST_LOOP, pois a opção deve ser definida no soquete receptor e a opção POSIX deve ser definida no soquete de envio.
IP_MULTICAST_TTL sim sim DWORD Define/obtém o valor TTL associado ao tráfego multicast IP no soquete.
IP_OPTIONS sim sim char [] Especifica as opções de IP a serem inseridas nos pacotes de saída. A configuração de novas opções substitui todas as opções especificadas anteriormente. Definir optval como zero remove todas as opções especificadas anteriormente. O suporte a IP_OPTIONS não é necessário. Para verificar se há suporte para IP_OPTIONS, use getsockopt para obter as opções atuais. Se getsockopt falhar, IP_OPTIONS não será suportado.
IP_ORIGINAL_ARRIVAL_IF sim sim DWORD (booleano) Indica se a função LPFN_WSARECVMSG (WSARecvMsg) deve retornar dados de controle opcionais contendo a interface de chegada em que o pacote foi recebido para soquetes de datagrama. Essa opção permite que a interface IPv4 em que o pacote foi recebido seja retornada na estrutura WSAMSG. Essa opção só é válida em soquetes de datagrama e raw (o tipo de soquete deve ser SOCK_DGRAM ou SOCK_RAW).
IP_PKTINFO sim sim DWORD Indica que as informações do pacote devem ser retornadas pela função WSARecvMsg .
IP_RECEIVE_BROADCAST sim sim DWORD (booleano) Permite ou bloqueia a recepção de transmissões.
IP_RECVIF sim sim DWORD (booleano) Indica se a pilha IP deve preencher o buffer de controle com detalhes sobre qual interface recebeu um pacote com um soquete de datagrama. Quando esse valor for true, a função LPFN_WSARECVMSG (WSARecvMsg) retornará dados de controle opcionais contendo a interface em que o pacote foi recebido para soquetes de datagrama. Essa opção permite que a interface IPv4 em que o pacote foi recebido seja retornada na estrutura WSAMSG. Essa opção só é válida em soquetes de datagrama e raw (o tipo de soquete deve ser SOCK_DGRAM ou SOCK_RAW).
IP_RECVTOS sim sim DWORD (booleano) Indica se a pilha IP deve preencher o buffer de controle com uma mensagem que contenha o campo de cabeçalho IPv4 do tipo de serviço (TOS) em um datagrama recebido. Quando esse valor for true, a função LPFN_WSARECVMSG (WSARecvMsg) retornará dados de controle opcionais contendo o valor do campo de cabeçalho TOS IPv4 do datagrama recebido. Essa opção permite que o campo de cabeçalho TOS IPv4 do datagrama recebido seja retornado na estrutura WSAMSG. O tipo de mensagem retornada será IP_TOS. Todos os bits DSCP e ECN do campo TOS serão retornados. Essa opção só é válida em soquetes de datagrama (o tipo de soquete deve ser SOCK_DGRAM).
IP_RECVECN sim sim DWORD (booleano) Indica se a pilha IP deve preencher o buffer de controle com uma mensagem que contenha os bits ECN do campo de cabeçalho IPv4 do tipo de serviço (TOS) em um datagrama recebido. Quando esse valor for true, a função LPFN_WSARECVMSG (WSARecvMsg) retornará dados de controle opcionais contendo os bits ECN do valor do campo de cabeçalho TOS IPv4 do datagrama recebido. Essa opção permite que os bits ECN do campo de cabeçalho TOS IPv4 do datagrama recebido sejam retornados na estrutura WSAMSG. O tipo de mensagem retornada será IP_ECN. Todos os 2 bits ECN do campo TOS serão retornados. Essa opção só é válida em soquetes de datagrama e raw (o tipo de soquete deve ser SOCK_DGRAM ou SOCK_RAW). Para segurança de tipo, você deve usar as funções WSAGetRecvIPEcn e WSASetRecvIPEcn em vez de usar a opção de soquete diretamente.
IP_RECVTTL sim sim DWORD (booleano) Indica que as informações de salto (TTL) devem ser retornadas na função LPFN_WSARECVMSG (WSARecvMsg). Se optval for definido como 1 na chamada para setsockopt, a opção será habilitada. Se definida como 0, a opção é desabilitada. Essa opção só é válida para soquetes de datagrama e raw (o tipo de soquete deve ser SOCK_DGRAM ou SOCK_RAW).
IP_TOS sim sim DWORD (booleano) Não use. As configurações de tipo de serviço (TOS) só devem ser definidas usando a API de Qualidade de Serviço. Consulte Serviços diferenciados na seção Qualidade de serviço do SDK da plataforma para obter mais informações.
IP_TTL sim sim DWORD (booleano) Altera o valor padrão definido pelo provedor de serviços TCP/IP no campo TTL do cabeçalho IP em datagramas de saída. O suporte a IP_TTL não é necessário. Para verificar se IP_TTL é compatível, use GetSockOpt para obter as opções atuais. Se getsockopt falhar, IP_TTL não será suportado.
IP_UNBLOCK_SOURCE sim ip_mreq_source Adiciona a fonte fornecida como remetente ao grupo e à interface multicast fornecidos.
IP_UNICAST_IF sim sim DWORD (IF_INDEX) Obtém ou define a interface de saída para o envio de tráfego IPv4. Essa opção não altera a interface padrão para receber tráfego IPv4. Essa opção é importante para computadores com hospedagem múltipla. O valor de entrada para definir essa opção é um endereço IPv4 de 4 bytes na ordem de bytes da rede. Esse parâmetro DWORD deve ser um índice de interface na ordem de bytes da rede. Qualquer endereço IP no bloco 0.x.x.x (primeiro octeto de 0), exceto o endereço IPv4 0.0.0.0, é tratado como um índice de interface. Um índice de interface é um número de 24 bits e o bloco de endereços IPv4 0.0.0.0/8 não é usado (esse intervalo é reservado). O índice da interface pode ser usado para especificar a interface padrão para o envio de tráfego para IPv4. A função GetAdaptersAddresses pode ser usada para obter as informações de índice da interface. Se optval for zero, a interface padrão para envio de tráfego será definida como não especificada. Ao obter essa opção, o optval retorna o índice da interface padrão atual para o envio de tráfego IPv4 na ordem de bytes do host.
IP_USER_MTU sim sim DWORD Obtém ou define um limite superior na MTU da camada IP (em bytes) para o soquete fornecido. Se o valor for maior do que a estimativa do sistema de MTU do caminho (que você pode recuperar em um soquete conectado consultando a opção de soquete IP_MTU ), a opção não terá efeito. Se o valor for menor, os pacotes de saída maiores que esse valor serão fragmentados ou não serão enviados, dependendo do valor de IP_DONTFRAGMENT. O valor padrão é IP_UNSPECIFIED_USER_MTU (MAXULONG). Para segurança de tipo, você deve usar as funções WSAGetIPUserMtu e WSASetIPUserMtu em vez de usar a opção de soquete diretamente.
IP_WFP_REDIRECT_CONTEXT sim sim WSACMSGHDR com dados de controle Um tipo de dados auxiliares de soquete de datagrama (cmsg_type) para indicar o contexto de redirecionamento de um soquete UDP usado por um serviço de redirecionamento da Plataforma para Filtros do Windows (WFP) no modo de usuário.
IP_WFP_REDIRECT_RECORDS sim sim WSACMSGHDR com dados de controle Um tipo de dados auxiliares de soquete de datagrama (cmsg_type) para indicar o registro de redirecionamento para um soquete UDP usado por um serviço de redirecionamento da Plataforma para Filtros do Windows (WFP) no modo de usuário.

Suporte do Windows para opções de IP_PROTO

Opção Windows 10 Windows 8 Windows Server 2012 Windows 7 Windows Server 2008 Windows Vista
IP_ADD_IFLIST A partir do Windows 10, versão 1803
IP_ADD_MEMBERSHIP sim sim sim sim sim sim
IP_ADD_SOURCE_MEMBERSHIP sim sim sim sim sim sim
IP_BLOCK_SOURCE sim sim sim sim sim sim
IP_DEL_IFLIST A partir do Windows 10, versão 1803
IP_DONTFRAGMENT sim sim sim sim sim sim
IP_DROP_MEMBERSHIP sim sim sim sim sim sim
IP_DROP_SOURCE_MEMBERSHIP sim sim sim sim sim sim
IP_GET_IFLIST A partir do Windows 10, versão 1803
IP_HDRINCL sim sim sim sim sim sim
IP_IFLIST A partir do Windows 10, versão 1803
IP_MULTICAST_IF sim sim sim sim sim sim
IP_MULTICAST_LOOP sim sim sim sim sim sim
IP_MULTICAST_TTL sim sim sim sim sim sim
IP_OPTIONS sim sim sim sim sim sim
IP_ORIGINAL_ARRIVAL_IF sim sim sim sim
IP_PKTINFO sim sim sim sim sim sim
IP_RECEIVE_BROADCAST sim sim sim sim sim sim
IP_RECVIF A partir do Windows 10, versão 1703 sim sim sim sim sim
IP_RECVTTL sim
IP_TOS sim sim sim
IP_TTL sim sim sim sim sim sim
IP_UNBLOCK_SOURCE sim sim sim sim sim sim
IP_UNICAST_IF sim sim sim sim sim sim
IP_WFP_REDIRECT_CONTEXT sim sim sim
IP_WFP_REDIRECT_RECORDS sim sim sim

Opção Windows Server 2003 Windows XP
IP_ADD_IFLIST
IP_ADD_MEMBERSHIP sim sim
IP_ADD_SOURCE_MEMBERSHIP sim sim
IP_BLOCK_SOURCE sim sim
IP_DEL_IFLIST
IP_DONTFRAGMENT sim sim
IP_DROP_MEMBERSHIP sim sim
IP_DROP_SOURCE_MEMBERSHIP sim sim
IP_GET_IFLIST
IP_HDRINCL sim sim
IP_IFLIST
IP_MULTICAST_IF sim sim
IP_MULTICAST_LOOP sim sim
IP_MULTICAST_TTL sim sim
IP_OPTIONS sim sim
IP_ORIGINAL_ARRIVAL_IF
IP_PKTINFO sim sim
IP_RECEIVE_BROADCAST sim sim
IP_RECVIF
IP_RECVTTL
IP_TOS
IP_TTL sim sim
IP_UNBLOCK_SOURCE sim sim
IP_UNICAST_IF
IP_WFP_REDIRECT_CONTEXT
IP_WFP_REDIRECT_RECORDS

Comentários

No SDK (Kit de Desenvolvimento de Software) do Microsoft Windows lançado para Windows Vista e posterior, a organização dos arquivos de cabeçalho foi alterada e o nível IPPROTO_IP é definido como o arquivo de cabeçalho Ws2def.h que é automaticamente incluído no arquivo de cabeçalho Winsock2.h. Algumas das opções de soquete IPPROTO_IP são definidas no arquivo de cabeçalho Ws2ipdef.h que é incluído automaticamente pelo arquivo de cabeçalho Ws2tcpip.h. O restante das opções de soquete IPPROTO_IP são definidas no arquivo de cabeçalho Wsipv6ok.h que é incluído automaticamente pelo arquivo de cabeçalho Winsock2.h. Os arquivos de cabeçalho Ws2def.h, Ws2ipdef.h e Wsipv6ok.h nunca devem ser usados diretamente.

No SDK da plataforma lançado para o Windows Server 2003 e Windows XP, o nível de IPPROTO_IP é definido no arquivo de cabeçalho Winsock2.h. Algumas das opções de soquete IPPROTO_IP são definidas no arquivo de cabeçalho Ws2tcpip.h. O restante das opções de soquete IPPROTO_IP são definidas no arquivo de cabeçalho Wsipv6ok.h que é incluído automaticamente pelo arquivo de cabeçalho Winsock2.h. O arquivo de cabeçalho Wsipv6ok.h nunca deve ser usado diretamente.

Requisitos

Requisito Valor
Cabeçalho
Ws2def.h (incluir Winsock2.h);
Ws2ipdef.h (incluir Ws2tcpip.h);
Wsipv6ok.h (incluir Winsock2.h)