Compartilhar via


Winsock IOCTLs

Esta seção descreve os IOCTLs (controles de entrada/saída) do Winsock Socket para várias edições de sistemas operacionais Windows. Use a função WSAIoctl ou WSPIoctl para emitir um IOCTL winsock para controlar o modo de um soquete, o protocolo de transporte ou o subsistema de comunicações.

Alguns IOCTLs winsock exigem mais explicação do que esta tabela pode transmitir; essas opções contêm links para tópicos adicionais.

É possível adotar um esquema de codificação que preserva os opcodes ioctlsocket atualmente definidos, fornecendo uma maneira conveniente de particionar o espaço do identificador de opcode tanto quanto o parâmetro dwIoControlCode agora é uma entidade de 32 bits. O parâmetro dwIoControlCode é criado para permitir a independência do protocolo e do fornecedor ao adicionar novos códigos de controle, mantendo a compatibilidade com versões anteriores com os códigos de controle Windows Sockets 1.1 e Unix. O parâmetro dwIoControlCode tem o seguinte formulário.

I O V T Família de fornecedores/endereços Código
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0

Observação

Os bits no parâmetro dwIoControlCode exibidos na tabela devem ser lidos verticalmente de cima para baixo por coluna. Portanto, o bit mais à esquerda é o bit 31, o próximo bit é o bit 30 e o bit mais à direita é o bit 0.

Eu será definido se o buffer de entrada for válido para o código, como com IOC_IN.

O será definido se o buffer de saída for válido para o código, como com IOC_OUT. Os códigos de controle que usam buffers de entrada e saída definem E/S.

V será definido se não houver parâmetros para o código, como com IOC_VOID.

T é uma quantidade de 2 bits que define o tipo do IOCTL. Os seguintes valores são definidos:

0 O IOCTL é um código IOCTL unix padrão, como com FIONREAD e FIONBIO.

1 O IOCTL é um código IOCTL genérico do Windows Sockets 2. Novos códigos IOCTL definidos para Windows Sockets 2 terão T == 1.

2 O IOCTL aplica-se somente a uma família de endereços específica.

3 O IOCTL aplica-se somente a um provedor de fornecedor específico, como acontece com IOC_VENDOR. Esse tipo permite que as empresas sejam atribuídas a um número de fornecedor que aparece no parâmetro da família Vendor/Address . Em seguida, o fornecedor pode definir novas IOCTLs específicas para esse fornecedor sem precisar registrar o IOCTL com uma casa de compensação, fornecendo assim flexibilidade e privacidade ao fornecedor.

Família de fornecedores/endereços Uma quantidade de 11 bits que define o fornecedor que possui o código (se T == 3) ou que contém a família de endereços à qual o código se aplica (se T == 2). Se esse for um código IOCTL unix (T == 0), esse parâmetro terá o mesmo valor que o código no Unix. Se esse for um IOCTL genérico do Windows Sockets 2 (T == 1), esse parâmetro poderá ser usado como uma extensão do parâmetro de código para fornecer valores de código adicionais.

Código A quantidade de 16 bits que contém o código IOCTL específico para a operação.

Códigos IOCTL unix

Há suporte para os seguintes códigos IOCTL do Unix (comandos).

FIONBIO

Habilitar ou desabilitar o modo de não bloqueio em soquetes. O parâmetro lpvInBuffer aponta para um QoS ( long sem sinal ), que não é zero se o modo de não bloqueio for habilitado e zero se ele for desabilitado. Quando um soquete é criado, ele opera no modo de bloqueio (ou seja, o modo sem bloqueio é desabilitado). Isso é consistente com soquetes BSD.

A rotina WSAAsyncSelect ou WSAEventSelect define automaticamente um soquete como modo sem bloqueio. Se WSAAsyncSelect ou WSAEventSelect tiver sido emitido em um soquete, qualquer tentativa de usar WSAIoctl para definir o soquete de volta para o modo de bloqueio falhará com WSAEINVAL. Para definir o soquete de volta para o modo de bloqueio, um aplicativo deve primeiro desabilitar WSAAsyncSelect chamando WSAAsyncSelect com o parâmetro lEvent igual a zero ou desabilitar WSAEventSelect chamando WSAEventSelect com o parâmetro lNetworkEvents igual a zero.

FIONREAD

Determine a quantidade de dados que podem ser lidos atomicamente dos soquetes. O parâmetro lpvOutBuffer aponta para um longo sem sinal no qual O WSAIoctl armazena o resultado.

Se o soquete passado no parâmetro s for orientado para fluxo (por exemplo, digite SOCK_STREAM), FIONREAD retornará a quantidade total de dados que podem ser lidos em uma única operação de recebimento; normalmente, isso é o mesmo que a quantidade total de dados enfileirados no soquete (como um fluxo de dados é orientado a bytes, isso não é garantido).

Se o soquete passado no parâmetro s for orientado a mensagens (por exemplo, digite SOCK_DGRAM), FIONREAD retornará aos relatórios o número total de bytes disponíveis para leitura, não o tamanho do primeiro datagrama (mensagem) enfileirado no soquete.

SIOCATMARK

Determine se todos os dados OOB foram lidos ou não. Isso se aplica apenas a um soquete de estilo de fluxo (por exemplo, tipo SOCK_STREAM) que foi configurado para recepção embutida de qualquer dado OOB (SO_OOBINLINE). Se nenhum dado OOB estiver esperando para ser lido, a operação retornará TRUE. Caso contrário, ele retornará FALSE e a próxima operação de recebimento executada no soquete recuperará alguns ou todos os dados anteriores à marca; o aplicativo deve usar a operação SIOCATMARK para determinar se algum permanece. Se houver dados normais anteriores aos dados urgentes (fora de banda), eles serão recebidos em ordem. (Observe que as operações de recv nunca misturarão o OOB e os dados normais na mesma chamada.) lpvOutBuffer aponta para um BOOL no qual WSAIoctl armazena o resultado.

Comandos do Windows Sockets 2

Há suporte para os seguintes comandos do Windows Sockets 2.

SIO_ACQUIRE_PORT_RESERVATION (configuração de opcode: I, T==3)

Solicite uma reserva de runtime para um bloco de portas TCP ou UDP. Para reservas de porta de runtime, o pool de portas exige que as reservas sejam consumidas do processo em cujo soquete a reserva foi concedida. As reservas de porta de runtime duram apenas o tempo de vida do soquete no qual o SIO_ACQUIRE_PORT_RESERVATION IOCTL foi chamado. Por outro lado, as reservas de porta persistentes criadas usando a função CreatePersistentTcpPortReservation ou CreatePersistentUdpPortReservation podem ser consumidas por qualquer processo com a capacidade de obter reservas persistentes.

Para obter informações mais detalhadas, consulte a referência de SIO_ACQUIRE_PORT_RESERVATION .

SIO_ACQUIRE_PORT_RESERVATION tem suporte no Windows Vista e versões posteriores do sistema operacional.

SIO_ADDRESS_LIST_CHANGE (configuração de opcode: V, T==1)

Para receber a notificação de alterações na lista de endereços de transporte locais da família de protocolos do soquete à qual o aplicativo pode ser associado. Nenhuma informação de saída será fornecida após a conclusão deste IOCTL; a conclusão apenas indica que a lista de endereços locais disponíveis foi alterada e deve ser consultada novamente por meio de SIO_ADDRESS_LIST_QUERY.

Supõe-se (embora não seja necessário) que o aplicativo use E/S sobreposta para ser notificado sobre a alteração após a conclusão de SIO_ADDRESS_LIST_CHANGE solicitação. Como alternativa, se o SIO_ADDRESS_LIST_CHANGE IOCTL for emitido em um soquete sem bloqueio e sem parâmetros sobrepostos (lpOverlapped/ lpCompletionRoutine estiver definido como NULL), ele será concluído imediatamente com o erro WSAEWOULDBLOCK. Em seguida, o aplicativo pode aguardar eventos de alteração de lista de endereços por meio de uma chamada para WSAEventSelect ou WSAAsyncSelect com FD_ADDRESS_LIST_CHANGE bit definido na máscara de bits do evento de rede.

SIO_ADDRESS_LIST_QUERY (configuração de opcode: O, T==1)

Obtém uma lista de endereços de transporte locais da família de protocolos do soquete à qual o aplicativo pode ser associado. A lista de endereços varia de acordo com a família de endereços e alguns endereços são excluídos da lista.

Observação

Em ambientes do Windows Plug-n-Play, os endereços podem ser adicionados e removidos dinamicamente. Portanto, os aplicativos não podem contar com as informações retornadas por SIO_ADDRESS_LIST_QUERY para serem persistentes. Os aplicativos podem se registrar para notificações de alteração de endereço por meio do SIO_ADDRESS_LIST_CHANGE IOCTL, que fornece notificação por meio de E/S sobreposta ou FD_ADDRESS_LIST_CHANGE evento. A seguinte sequência de ações pode ser usada para garantir que o aplicativo sempre tenha informações de lista de endereços atuais:

  • Problema SIO_ADDRESS_LIST_CHANGE IOCTL
  • Problema SIO_ADDRESS_LIST_QUERY IOCTL
  • Sempre que SIO_ADDRESS_LIST_CHANGE IOCTL notificar a aplicação de alteração de lista de endereços (por meio de E/S sobreposta ou sinalizando FD_ADDRESS_LIST_CHANGE evento), toda a sequência de ações deve ser repetida.

Para obter informações mais detalhadas, consulte a referência de SIO_ADDRESS_LIST_QUERY . SIO_ADDRESS_LIST_QUERY tem suporte no Windows 2000 e posterior.

SIO_APPLY_TRANSPORT_SETTING (configuração de opcode: I, T==3)

Aplica uma configuração de transporte a um soquete. A configuração de transporte que está sendo aplicada baseia-se no TRANSPORT_SETTING_ID passado no parâmetro lpvInBuffer .

A única configuração de transporte definida atualmente é para a funcionalidade REAL_TIME_NOTIFICATION_CAPABILITY em um soquete TCP.

Se o TRANSPORT_SETTING_ID passado tiver o membro Guid definido como REAL_TIME_NOTIFICATION_CAPABILITY, essa será uma solicitação para aplicar configurações de notificação em tempo real para o soquete TCP usado com o ControlChannelTrigger para receber notificações de rede em segundo plano em um aplicativo da Windows Store.

Para obter informações mais detalhadas, consulte a referência de SIO_APPLY_TRANSPORT_SETTING . SIO_APPLY_TRANSPORT_SETTING tem suporte em Windows 8, Windows Server 2012 e posteriores.

SIO_ASSOCIATE_HANDLE (configuração de opcode: I, T==1)

Associe esse soquete com o identificador especificado de uma interface de assistente. O buffer de entrada contém o valor inteiro correspondente à constante de manifesto para a interface complementar (por exemplo, TH_NETDEV e TH_TAPI.), seguido por um valor que é um identificador da interface complementar especificada, juntamente com quaisquer outras informações necessárias. Consulte a seção apropriada em Anexos do Winsock para obter detalhes específicos de uma interface complementar específica. O tamanho total é refletido no comprimento do buffer de entrada. Nenhum buffer de saída é necessário. O código de erro WSAENOPROTOOPT é indicado para provedores de serviços que não dão suporte a esse IOCTL. O identificador associado a esse IOCTL pode ser recuperado usando SIO_TRANSLATE_HANDLE.

Uma interface complementar poderá ser usada, por exemplo, se um provedor específico fornecer (1) uma grande quantidade de controles adicionais sobre o comportamento de um soquete e (2) os controles forem específicos do provedor o suficiente para que eles não sejam mapeados para funções existentes do Windows Socket ou para as que provavelmente serão definidas no futuro. É recomendável que o COM (Component Object Model) seja usado em vez desse IOCTL para descobrir e rastrear outras interfaces que possam ter suporte de um soquete. Esse IOCTL está presente para compatibilidade (inversa) com sistemas em que COM não está disponível ou não pode ser usado por algum outro motivo.

SIO_ASSOCIATE_PORT_RESERVATION (configuração de opcode: I, T==3)

Associe um soquete a uma reserva persistente ou de runtime para um bloco de portas TCP ou UDP identificadas pelo token de reserva de porta. O SIO_ASSOCIATE_PORT_RESERVATION IOCTL deve ser emitido antes que o soquete seja associado. Se e quando o soquete estiver associado, a porta atribuída a ele será selecionada na reserva de porta identificada pelo token fornecido. Se nenhuma porta estiver disponível na reserva especificada , a chamada de função de associação falhará.

Para obter informações mais detalhadas, consulte a referência de SIO_ASSOCIATE_PORT_RESERVATION .

SIO_ASSOCIATE_PORT_RESERVATION tem suporte no Windows Vista e versões posteriores do sistema operacional.

SIO_BASE_HANDLE (configuração de opcode: O, T==1)

Recupera o identificador do provedor de serviços base para um determinado soquete. O valor retornado é um SOCKET.

Um provedor de serviços em camadas nunca interceptaria esse IOCTL, pois o valor retornado deve ser o identificador de soquete do provedor de serviços base.

Se o buffer de saída não for grande o suficiente para um identificador de soquete ( cbOutBuffer for menor que o tamanho de um SOCKET) ou o parâmetro lpvOutBuffer for um ponteiro NULL , SOCKET_ERROR será retornado como resultado desse IOCTL e WSAGetLastError retornará WSAEFAULT.

SIO_BASE_HANDLE é definido no arquivo de cabeçalho Mswsock.h e tem suporte no Windows Vista e posterior.

SIO_BSP_HANDLE (configuração de opcode: O, T==1)

Recupera o identificador do provedor de serviços base para um soquete usado pela função WSASendMsg . O valor retornado é um SOCKET.

Esse Ioctl é usado por um provedor de serviços em camadas para garantir que o provedor intercepte a função WSASendMsg .

Se o buffer de saída não for grande o suficiente para um identificador de soquete ( cbOutBuffer for menor que o tamanho de um SOCKET) ou o parâmetro lpvOutBuffer for um ponteiro NULL , SOCKET_ERROR será retornado como resultado desse IOCTL e WSAGetLastError retornará WSAEFAULT.

SIO_BSP_HANDLE é definido no arquivo de cabeçalho Mswsock.h e tem suporte no Windows Vista e posterior.

SIO_BSP_HANDLE_SELECT (configuração de opcode: O, T==1)

Recupera o identificador do provedor de serviços base para um soquete usado pela função select . O valor retornado é um SOCKET.

Esse Ioctl é usado por um provedor de serviços em camadas para garantir que o provedor intercepte a função select .

Se o buffer de saída não for grande o suficiente para um identificador de soquete ( cbOutBuffer for menor que o tamanho de um SOCKET) ou o parâmetro lpvOutBuffer for um ponteiro NULL , SOCKET_ERROR será retornado como resultado desse IOCTL e WSAGetLastError retornará WSAEFAULT.

SIO_BSP_HANDLE_SELECT é definido no arquivo de cabeçalho Mswsock.h e tem suporte no Windows Vista e posterior.

SIO_BSP_HANDLE_POLL (configuração de opcode: O, T==1)

Recupera o identificador do provedor de serviços base para um soquete usado pela função WSAPoll . O parâmetro lpOverlapped deve ser um ponteiro NULL . O valor retornado é um SOCKET.

Esse Ioctl é usado por um provedor de serviços em camadas para garantir que o provedor intercepte a função WSAPoll .

Se o buffer de saída não for grande o suficiente para um identificador de soquete ( cbOutBuffer é menor que o tamanho de um SOCKET), o parâmetro lpvOutBuffer é um ponteiro NULL ou o parâmetro lpOverlapped não é um ponteiro NULL , SOCKET_ERROR é retornado como resultado desse IOCTL e WSAGetLastError retorna WSAEFAULT.

SIO_BSP_HANDLE_POLL é definido no arquivo de cabeçalho Mswsock.h e tem suporte no Windows Vista e posterior.

SIO_CHK_QOS (configuração de opcode: I, O, T==3)

Recupera informações sobre características de tráfego de QoS. Durante a fase de transição no sistema de envio entre a configuração de fluxo e o recebimento de uma mensagem RESV (consulte Como o serviço RSVP invoca tc para obter mais informações sobre a fase de transição), o tráfego associado a um fluxo RSVP é moldado com base no tipo de serviço (MELHOR ESFORÇO, CARGA CONTROLADA ou GARANTIDO). Para obter mais informações, consulte Usando SIO_CHK_QOS na seção Qualidade do Serviço do SDK da Plataforma.

SIO_CPU_AFFINITY (configuração de opcode: I, T==3)

Habilita o compartilhamento de porta e a paralelização de indicação de recebimento. Quando o aplicativo usa essa opção de soquete para associar soquetes a processadores diferentes e associa os soquetes ao mesmo endereço, as indicações de recebimento serão distribuídas entre os soquetes com base no hash RSS (Receive Side Scaling). As configurações do RSS não são alteradas, portanto, qualquer fluxo fornecido (ponto de extremidade local, par de pontos de extremidade remotos) sempre será indicado no mesmo processador. Como resultado, todos os pacotes pertencentes a um determinado fluxo serão indicados para o mesmo soquete. Esse IOCTL deve ser chamado antes da associação, caso contrário, WSAEINVAL será retornado. O buffer de entrada é um índice de processador (baseado em 0) do tipo USHORT. O IOCTL é incompatível com SO_REUSEADDR e SO_REUSE_MULTICASTPORT. Compatível apenas com soquetes UDP.

Observação

Se você estiver direcionando a versão 10.0.19041.0 (Windows 10, versão 2004) do SDK do Windows, use o valor 0x98000015 em vez do nome SIO_CPU_AFFINITY.

SIO_ENABLE_CIRCULAR_QUEUEING (configuração de opcode: V, T==1)

Indica ao provedor de serviços orientado a mensagens subjacente que uma mensagem recém-chegada nunca deve ser descartada devido a um estouro de fila de buffer. Em vez disso, a mensagem mais antiga na fila deve ser eliminada para acomodar a mensagem recém-chegada. Nenhum buffer de entrada e saída é necessário. Observe que esse IOCTL só é válido para soquetes associados a protocolos não confiáveis orientados a mensagens. O código de erro WSAENOPROTOOPT é indicado para provedores de serviços que não dão suporte a esse IOCTL.

SIO_FIND_ROUTE (configuração de opcode: O, T==1)

Quando emitido, esse IOCTL solicita que a rota para o endereço remoto especificado como um sockaddr no buffer de entrada seja descoberta. Se o endereço já existir no cache local, sua entrada será invalidada. No caso do IPX da Novell, essa chamada inicia um IPX GetLocalTarget (GLT), que consulta a rede para o endereço remoto especificado.

SIO_FLUSH (configuração de opcode: V, T==1)

Descarta o conteúdo atual da fila de envio associada a esse soquete. Nenhum buffer de entrada e saída é necessário. O código de erro WSAENOPROTOOPT é indicado para provedores de serviços que não dão suporte a esse IOCTL.

SIO_GET_BROADCAST_ADDRESS (configuração de opcode: O, T==1)

Esse IOCTL preenche o buffer de saída com uma estrutura sockaddr que contém um endereço de difusão adequado para uso com sendto/ WSASendTo. Este IOCTL não tem suporte para soquetes IPv6 e retorna o código de erro WSAENOPROTOOPT .

SIO_GET_EXTENSION_FUNCTION_POINTER (configuração de opcode: O, I, T==1)

Recupere um ponteiro para a função de extensão especificada com suporte pelo provedor de serviços associado. O buffer de entrada contém um GUID (identificador global exclusivo) cujo valor identifica a função de extensão em questão. O ponteiro para a função desejada é retornado no buffer de saída. Os identificadores de função de extensão são estabelecidos por fornecedores de provedores de serviços e devem ser incluídos na documentação do fornecedor que descreve as funcionalidades e a semântica da função de extensão.

Os valores de GUID para funções de extensão compatíveis com o provedor de serviços TCP/IP do Windows são definidos no arquivo de cabeçalho Mswsock.h . O valor possível para esses GUIDs é o seguinte:

Termo Descrição
WSAID_ACCEPTEX
A função de extensão AcceptEx .
WSAID_CONNECTEX
A função de extensão ConnectEx .
WSAID_DISCONNECTEX
A função de extensão DisconnectEx .
WSAID_GETACCEPTEXSOCKADDRS
A função de extensão GetAcceptExSockaddrs .
WSAID_TRANSMITFILE
A função de extensão TransmitFile .
WSAID_TRANSMITPACKETS
A função de extensão TransmitPackets .
WSAID_WSARECVMSG
A função de extensão LPFN_WSARECVMSG (WSARecvMsg ).
WSAID_WSASENDMSG
A função de extensão WSASendMsg .

SIO_GET_GROUP_QOS (configuração de opcode: O, I, T==1)

Reservado para uso futuro com soquetes.

Recupere a estrutura QOS associada ao grupo de soquetes ao qual esse soquete pertence. O buffer de entrada é opcional. Alguns protocolos (por exemplo, RSVP) permitem que o buffer de entrada seja usado para qualificar uma solicitação de qualidade de serviço. A estrutura QOS será copiada para o buffer de saída. Se esse soquete não pertencer a um grupo de soquetes apropriado, os membros SendingFlowspec e ReceivingFlowspec da estrutura de QOS retornada serão definidos como NULL. O código de erro WSAENOPROTOOPT é indicado para provedores de serviços que não dão suporte à qualidade do serviço.

SIO_GET_INTERFACE_LIST (configuração de opcode: O, T==0)

Retorna uma lista de interfaces IP configuradas e seus parâmetros como uma matriz de estruturas de INTERFACE_INFO .

Observação

O suporte a esse comando é obrigatório para provedores de serviçoS TCP/IP compatíveis com o Windows Sockets 2.

O parâmetro lpvOutBuffer aponta para o buffer no qual armazenar as informações sobre interfaces como uma matriz de estruturas de INTERFACE_INFO para endereços IP unicast nas interfaces. O parâmetro cbOutBuffer especifica o comprimento do buffer de saída. O número de interfaces retornadas (número de estruturas retornadas no buffer apontado pelo parâmetro lpvOutBuffer ) pode ser determinado com base no comprimento real do buffer de saída retornado no parâmetro lpcbBytesReturned .

Se a função WSAIoctl for chamada com SIO_GET_INTERFACE_LIST e o membro de nível do parâmetro de soquete s não for definido como IPPROTO_IP, WSAEINVAL será retornado. Uma chamada para a função WSAIoctl com SIO_GET_INTERFACE_LIST retornará WSAEFAULT se o parâmetro cbOutBuffer que especifica o comprimento do buffer de saída for muito pequeno, ro receberá a lista de interfaces configuradas.

SIO_GET_INTERFACE_LIST tem suporte no Windows Me/98 e Windows NT 4.0 com SP4 e posterior.

SIO_GET_INTERFACE_LIST_EX (configuração de opcode: O, T==0)

Reservado para uso futuro com soquetes.

Retorna uma lista de interfaces IP configuradas e seus parâmetros como uma matriz de estruturas INTERFACE_INFO_EX .

O parâmetro lpvOutBuffer aponta para o buffer no qual armazenar as informações sobre interfaces como uma matriz de estruturas de INTERFACE_INFO_EX para endereços IP unicast na interface. O parâmetro cbOutBuffer especifica o comprimento do buffer de saída. O número de interfaces retornadas (número de estruturas retornadas em lpvOutBuffer) pode ser determinado com base no comprimento real do buffer de saída retornado no parâmetro lpcbBytesReturned .

SIO_GET_INTERFACE_LIST_EX atualmente não tem suporte no Windows.

SIO_GET_QOS (configuração de opcode: O, T==1)

Reservado para uso futuro com soquetes. Recupere a estrutura QOS associada ao soquete. O buffer de entrada é opcional. Alguns protocolos (por exemplo, RSVP) permitem que o buffer de entrada seja usado para qualificar uma solicitação de qualidade de serviço. A estrutura QOS será copiada para o buffer de saída. O buffer de saída deve ser dimensionado grande o suficiente para poder conter a estrutura completa do QOS . O código de erro WSAENOPROTOOPT é indicado para provedores de serviços que não dão suporte à qualidade do serviço.

Um remetente não pode chamar SIO_GET_QOS até que o soquete esteja conectado.

Um receptor pode chamar SIO_GET_QOS assim que for associado.

SIO_GET_TX_TIMESTAMP

Um IOCTL de soquete usado para obter carimbos de data/hora para pacotes transmitidos (TX). Válido somente para soquetes de datagrama.

O código de controle SIO_GET_TX_TIMESTAMP remove um carimbo de data/hora de transmissão da fila de carimbo de data/hora de transmissão de um soquete. Habilite a recepção de carimbo de data/hora primeiro usando o SIO_TIMESTAMPING IOCTL do soquete. Em seguida, recupere carimbos de data/hora tx por ID chamando a função WSAIoctl (ou WSPIoctl) com os parâmetros a seguir.

Para SIO_GET_TX_TIMESTAMP, a entrada é uma ID de carimbo de data/hora UINT32 e a saída é um valor de carimbo de data/hora UINT64 . Em caso de êxito, o carimbo de data/hora tx está disponível e é retornado. Se nenhum carimbo de data/hora de transmissão estiver disponível, WSAGetLastError retornará WSAEWOULDBLOCK.

Observação

Não há suporte para carimbos de data/hora TX ao fazer um envio unido por meio de UDP_SEND_MSG_SIZE.

Confira também Carimbo de data/hora do Winsock.

SIO_IDEAL_SEND_BACKLOG_CHANGE (configuração de opcode: V, T==0)

Notifica um aplicativo quando o valor ideal da lista de pendências de envio (ISB) é alterado para a conexão subjacente.

Ao enviar dados por uma conexão TCP usando soquetes do Windows, é importante manter uma quantidade suficiente de dados pendentes (enviados, mas ainda não confirmados) no TCP para obter a maior taxa de transferência. O valor ideal para a quantidade de dados pendentes para obter a melhor taxa de transferência para a conexão TCP é chamado de tamanho de ISB (lista de pendências de envio ideal). O valor isb é uma função do produto de atraso de largura de banda da conexão TCP e da janela de recebimento anunciada do receptor (e, em parte, a quantidade de congestionamento na rede).

O valor isb por conexão está disponível na implementação do protocolo TCP no Windows Server 2008, Windows Vista com SP1 e versões posteriores do sistema operacional. O SIO_IDEAL_SEND_BACKLOG_CHANGE IOCTL pode ser usado por um aplicativo para receber notificação quando o valor do ISB é alterado dinamicamente para uma conexão.

Para obter informações mais detalhadas, consulte a referência de SIO_IDEAL_SEND_BACKLOG_CHANGE .

SIO_IDEAL_SEND_BACKLOG_CHANGE tem suporte no Windows Server 2008, Windows Vista com SP1 e versões posteriores do sistema operacional.

SIO_IDEAL_SEND_BACKLOG_QUERY (configuração de opcode: O, T==0)

Recupera o valor de ISB (lista de pendências de envio) ideal para a conexão subjacente.

Ao enviar dados por uma conexão TCP usando soquetes do Windows, é importante manter uma quantidade suficiente de dados pendentes (enviados, mas ainda não confirmados) no TCP para obter a maior taxa de transferência. O valor ideal para a quantidade de dados pendentes para obter a melhor taxa de transferência para a conexão TCP é chamado de tamanho de ISB (lista de pendências de envio ideal). O valor isb é uma função do produto de atraso de largura de banda da conexão TCP e da janela de recebimento anunciada do receptor (e, em parte, a quantidade de congestionamento na rede).

O valor isb por conexão está disponível na implementação do protocolo TCP no Windows Server 2008 e posterior. O SIO_IDEAL_SEND_BACKLOG_QUERY IOCTL pode ser usado por um aplicativo para consultar o valor isb de uma conexão.

Para obter informações mais detalhadas, consulte a referência de SIO_IDEAL_SEND_BACKLOG_QUERY .

SIO_IDEAL_SEND_BACKLOG_QUERY tem suporte no Windows Server 2008, Windows Vista com SP1 e versões posteriores do sistema operacional.

SIO_KEEPALIVE_VALS (configuração de opcode: I, T==3)

Habilita ou desabilita a configuração por conexão da opção keep alive TCP, que especifica o tempo limite e o intervalo de keep alive do TCP. Para obter mais informações sobre a opção keep alive, consulte a seção 4.2.3.6 sobre os Requisitos para Hosts da Internet – Camadas de Comunicação especificadas no RFC 1122 disponíveis no site do IETF. (Esse recurso só pode estar disponível em inglês.)

SIO_KEEPALIVE_VALS pode ser usado para habilitar ou desabilitar investigações keep alive e definir o tempo limite e o intervalo de keep alive. O tempo limite keep alive especifica o tempo limite, em milissegundos, sem atividade até que o primeiro pacote keep alive seja enviado. O intervalo keep alive especifica o intervalo, em milissegundos, entre quando pacotes keep alive sucessivos são enviados se nenhuma confirmação for recebida.

A opção SO_KEEPALIVE , que é uma das opções de soquete SOL_SOCKET, também pode ser usada para habilitar ou desabilitar o keep alive do TCP em uma conexão, bem como consultar o estado atual dessa opção. Para consultar se o keep alive TCP está habilitado em um soquete, a função getsockopt pode ser chamada com a opção SO_KEEPALIVE . Para habilitar ou desabilitar o keep alive do TCP, a função setsockopt pode ser chamada com a opção SO_KEEPALIVE . Se o keep alive do TCP estiver habilitado com SO_KEEPALIVE, as configurações de TCP padrão serão usadas para tempo limite e intervalo keep alive, a menos que esses valores tenham sido alterados usando SIO_KEEPALIVE_VALS.

Para obter informações mais detalhadas, consulte a referência de SIO_KEEPALIVE_VALS . SIO_KEEPALIVE_VALS tem suporte no Windows 2000 e posterior.

SIO_LOOPBACK_FAST_PATH (configuração de opcode: I, T==3)

Configura um soquete TCP para menor latência e operações mais rápidas na interface de loopback. Esse IOCTL solicita que a pilha TCP/IP use um caminho rápido especial para operações de loopback nesse soquete. O SIO_LOOPBACK_FAST_PATH IOCTL só pode ser usado com soquetes TCP. Esse IOCTL deve ser usado em ambos os lados da sessão de loopback. O caminho rápido de loopback TCP tem suporte usando a interface de loopback IPv4 ou IPv6. Por padrão, SIO_LOOPBACK_FAST_PATH está desabilitado.

Para obter informações mais detalhadas, consulte a referência de SIO_LOOPBACK_FAST_PATH . SIO_LOOPBACK_FAST_PATH tem suporte em Windows 8, Windows Server 2012 e posteriores.

SIO_MULTIPOINT_LOOPBACK (configuração de opcode: V, T==1)

Controla se os dados enviados por um aplicativo no computador local (não necessariamente pelo mesmo soquete) em uma sessão multicast serão recebidos por um soquete unido ao grupo de destino multicast na interface de loopback. Um valor true faz com que os dados multicast enviados por um aplicativo no computador local sejam entregues a um soquete de escuta na interface de loopback. Um valor false impede que dados multicast enviados por um aplicativo no computador local sejam entregues a um soquete de escuta na interface de loopback. Por padrão, SIO_MULTIPOINT_LOOPBACK está habilitado.

SIO_MULTICAST_SCOPE (configuração de opcode: I, T==1)

Especifica o escopo sobre o qual as transmissões multicast ocorrerão. O escopo é definido como o número de segmentos de rede roteado a serem cobertos. Um escopo de zero indicaria que a transmissão multicast não seria colocada no fio, mas poderia ser disseminada entre soquetes dentro do host local. Um valor de escopo de um (o padrão) indica que a transmissão será colocada no fio, mas não cruzará nenhum roteador. Valores de escopo mais altos determinam o número de roteadores que podem ser cruzados. Observe que isso corresponde ao parâmetro TTL (vida útil) em multicasting de IP. Por padrão, o escopo é 1.

SIO_QUERY_RSS_PROCESSOR_INFO (configuração de opcode: O, T==1)

Consulta a associação entre um soquete e um núcleo de processador RSS e um nó NUMA.

O SIO_QUERY_RSS_PROCESSOR_INFO IOCTL retorna uma estrutura SOCKET_PROCESSOR_AFFINITY que contém o PROCESSOR_NUMBER e a ID do nó NUMA. A estrutura de PROCESSOR_NUMBER retornada contém um número de grupo e um número de processador relativo dentro do grupo.

Para obter informações mais detalhadas, consulte a referência de SIO_QUERY_RSS_PROCESSOR_INFO . SIO_QUERY_RSS_PROCESSOR_INFO tem suporte em Windows 8, Windows Server 2012 e posteriores.

SIO_QUERY_RSS_SCALABILITY_INFO (configuração de opcode: O, T==3)

Consultas descarregam interfaces para a funcionalidade de RSS (dimensionamento do lado do recebimento). A estrutura de argumento retornada para SIO_QUERY_RSS_SCALABILITY_INFO é especificada na estrutura RSS_SCALABILITY_INFO definida no arquivo de cabeçalho Mstcpip.h . Essa estrutura é definida da seguinte maneira:

// Scalability info for the transport
typedef struct _RSS_SCALABILITY_INFO {
   BOOLEAN RssEnabled;
} RSS_SCALABILITY_INFO, *PRSS_SCALABILITY_INFO;

O valor retornado no membro RssEnabled indica se o RSS está habilitado em pelo menos uma interface.

Se o buffer de saída não for grande o suficiente para a estrutura de RSS_SCALABILITY_INFO (o cbOutBuffer é menor que o tamanho de um RSS_SCALABILITY_INFO) ou o parâmetro lpvOutBuffer é um ponteiro NULL , SOCKET_ERROR é retornado como resultado desse IOCTL e WSAGetLastError retorna WSAEINVAL.

Na rede de alta velocidade em que várias CPUs residem em um único sistema, a capacidade da pilha de protocolos de rede de dimensionar bem em um sistema de várias CPU é inibida porque a arquitetura do NDIS 5.1 e versões anteriores limita o processamento de protocolo para uma única CPU. O RSS (dimensionamento do lado do recebimento) resolve esse problema permitindo que a carga de rede de um adaptador de rede seja balanceada em várias CPUs.

SIO_QUERY_RSS_SCALABILITY_INFO tem suporte no Windows Vista e posteriores.

SIO_QUERY_TRANSPORT_SETTING (configuração de opcode: I, T==3)

Consulta as configurações de transporte em um soquete. A configuração de transporte que está sendo consultada baseia-se no TRANSPORT_SETTING_ID passado no parâmetro lpvInBuffer .

A única configuração de transporte definida atualmente é para a funcionalidade REAL_TIME_NOTIFICATION_CAPABILITY em um soquete TCP.

Se o TRANSPORT_SETTING_ID tiver o membro Guid definido como REAL_TIME_NOTIFICATION_CAPABILITY, essa será uma solicitação para consultar as configurações de notificação em tempo real para o soquete TCP usado com o ControlChannelTrigger para receber notificações de rede em segundo plano em um aplicativo da Windows Store. Se a chamada WSAIoctl ou WSPIoctl for bem-sucedida, esse IOCTL retornará uma estrutura REAL_TIME_NOTIFICATION_SETTING_OUTPUT com o status atual.

Para obter informações mais detalhadas, consulte a referência de SIO_QUERY_TRANSPORT_SETTING . SIO_QUERY_TRANSPORT_SETTING tem suporte em Windows 8, Windows Server 2012 e posteriores.

SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE (configuração de opcode: O, T==3)

Consulta o identificador de ponto de extremidade ALE (Application Layer Enforcement).

A Plataforma de Filtragem do Windows (WFP) dá suporte à inspeção e modificação de tráfego de rede. No Windows Vista, o WFP se concentra em cenários em que o computador host é o ponto de extremidade de comunicação. No Windows Server 2008 , no entanto, há implementações de firewall de borda que gostariam de aproveitar a plataforma WFP para inspecionar e proxy de tráfego de passagem. O servidor ISA (Segurança e Aceleração da Internet) é um exemplo desse dispositivo de borda.

Há alguns cenários de firewall que podem exigir a capacidade de injetar um pacote de entrada no caminho de envio associado a um ponto de extremidade existente. Precisa haver um mecanismo para descobrir o identificador de ponto de extremidade da camada de transporte associado ao ponto de extremidade de destino. O aplicativo que criou o ponto de extremidade possui esses pontos de extremidade de camada de transporte. Esse IOCTL é usado para fornecer o identificador de soquete para transportar o mapeamento do identificador do ponto de extremidade da camada.

Se o buffer de saída não for grande o suficiente para o identificador de ponto de extremidade (o cbOutBuffer for menor que o tamanho de um UINT64) ou o parâmetro lpvOutBuffer for um ponteiro NULL , SOCKET_ERROR será retornado como resultado desse IOCTL e WSAGetLastError retornará WSAEINVAL.

SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE tem suporte no Windows Vista e posteriores.

SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT (configuração de opcode: I, T==3)

Consulta o contexto de redirecionamento para um registro de redirecionamento usado por um serviço de redirecionamento da Plataforma de Filtragem do Windows (WFP).

O SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL é usado para fornecer controle de conexão com proxie em conexões de soquete redirecionadas. Esse recurso WFP facilita o acompanhamento de registros de redirecionamento do redirecionamento inicial de uma conexão com a conexão final com o destino.

Para obter informações mais detalhadas, consulte a referência de SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT . SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT tem suporte em Windows 8, Windows Server 2012 e posteriores.

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS (configuração de opcode: I, T==3)

Consulta o registro de redirecionamento para a conexão TCP/IP aceita para uso por um serviço de redirecionamento da Plataforma de Filtragem do Windows (WFP).

O SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL é usado para fornecer controle de conexão com proxie em conexões de soquete redirecionadas. Esse recurso WFP facilita o acompanhamento de registros de redirecionamento do redirecionamento inicial de uma conexão com a conexão final com o destino.

Para obter informações mais detalhadas, consulte a referência de SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS . SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS tem suporte em Windows 8, Windows Server 2012 e posteriores.

SIO_RCVALL (configuração de opcode: I, T==3)

Permite que um soquete receba todos os pacotes IPv4 ou IPv6 passando uma limitação de um adaptador de rede. O identificador de soquete passado para a função WSAIoctl deve ser um dos seguintes:

  • Um soquete IPv4 criado com a família de endereços definida como AF_INET, o tipo de soquete definido como SOCK_RAW e o protocolo definido como IPPROTO_IP.
  • Um soquete IPv6 que foi criado com a família de endereços definida como AF_INET6, o tipo de soquete definido como SOCK_RAW e o protocolo definido como IPPROTO_IPV6.

O soquete também deve estar associado a uma interface IPv4 ou IPv6 local explícita, o que significa que você não pode se associar a INADDR_ANY ou in6addr_any.

No Windows Server 2008 e anteriores, a configuração ioctl SIO_RCVALL não capturaria pacotes locais enviados de um adaptador de rede. Isso incluiu pacotes recebidos em outra interface e encaminhou o adaptador de rede especificado para o SIO_RCVALL IOCTL.

No Windows 7 e no Windows Server 2008 R2, isso foi alterado para que os pacotes locais enviados de um adaptador de rede também sejam capturados. Isso inclui pacotes recebidos em outra interface e, em seguida, encaminhou o adaptador de rede associado ao soquete com SIO_RCVALL IOCTL.

Definir esse IOCTL requer privilégio de administrador no computador local.

Às vezes, esse recurso é chamado de modo promíscuo.

Os valores possíveis para a opção SIO_RCVALL IOCTL são especificados na enumeração RCVALL_VALUE definida no arquivo de cabeçalho Mstcpip.h . Os valores possíveis para SIO_RCVALL são os seguintes:

Termo Descrição
RCVALL_OFF
Desabilite essa opção para que um soquete não receba todos os pacotes IPv4 ou IPv6 na rede.
RCVALL_ON
Habilite essa opção para que um soquete receba todos os pacotes IPv4 ou IPv6 na rede. Essa opção habilita o modo promíscuo na NIC (cartão de interface de rede), se a NIC der suporte ao modo promíscuo. Em um segmento lan com um hub de rede, uma NIC que dá suporte ao modo promíscuo capturará todo o tráfego IPv4 ou IPv6 na LAN, incluindo o tráfego entre outros computadores no mesmo segmento lan. Todos os pacotes capturados (IPv4 ou IPv6, dependendo do soquete) serão entregues ao soquete bruto.
Essa opção não capturará outros pacotes (pacotes ARP, IPX e NetBEUI, por exemplo) na interface.
O Netmon usa o mesmo modo para o adaptador de rede, mas não usa essa opção para capturar o tráfego.
RCVALL_SOCKETLEVELONLY
Esse recurso não está implementado no momento, portanto, definir essa opção não tem nenhum efeito.
RCVALL_IPLEVEL
Habilite essa opção para que um soquete IPv4 ou IPv6 receba todos os pacotes no nível de IP na rede. Essa opção não habilita o modo promíscuo na interface de rede cartão. Essa opção afeta apenas o processamento de pacotes no nível de IP. A NIC ainda recebe apenas pacotes direcionados para seus endereços unicast e multicast configurados. No entanto, um soquete com essa opção habilitada receberá não apenas pacotes direcionados a endereços IP específicos, mas receberá todos os pacotes IPv4 ou IPv6 que a NIC recebe.
Essa opção não capturará outros pacotes (pacotes ARP, IPX e NetBEUI, por exemplo) recebidos na interface.

Para obter informações mais detalhadas, consulte a referência de SIO_RCVALL .

SIO_RCVALL tem suporte no Windows 2000 e posterior.

SIO_RCVALL_IGMPMCAST (configuração de opcode: I, T==3)

Permite que um soquete receba todo o tráfego DE IP multicast IGMP na rede, sem receber outro tráfego de IP multicast. O identificador de soquete passado para a função WSAIoctl deve ser de AF_INET família de endereços, SOCK_RAW tipo de soquete e protocolo IPPROTO_IGMP. O soquete também deve estar associado a uma interface local explícita, o que significa que você não pode se associar a INADDR_ANY.

Depois que o soquete estiver associado e o conjunto IOCTL, as chamadas para as funções WSARecv ou recv retornarão datagramas de IP multicast passando pela interface fornecida. Observe que você deve fornecer um buffer suficientemente grande. Definir esse IOCTL requer privilégio de administrador no computador local.

SIO_RCVALL_IGMPMCAST tem suporte no Windows 2000 e posterior.

SIO_RCVALL_MCAST (configuração de opcode: I, T==3)

Permite que um soquete receba todo o tráfego IP multicast na rede (ou seja, todos os pacotes IP destinados a endereços IP no intervalo de 224.0.0.0 a 239.255.255.255). O identificador de soquete passado para a função WSAIoctl deve ser de AF_INET família de endereços, SOCK_RAW tipo de soquete e protocolo IPPROTO_UDP. O soquete também deve ser associado a uma interface local explícita, o que significa que você não pode associar a INADDR_ANY. O soquete deve ser associado à porta zero.

Depois que o soquete estiver associado e o conjunto IOCTL, as chamadas para as funções WSARecv ou recv retornarão datagramas de IP multicast passando pela interface fornecida. Observe que você deve fornecer um buffer suficientemente grande. Definir esse IOCTL requer privilégio de administrador no computador local.

SIO_RCVALL_MCAST tem suporte no Windows 2000 e posterior.

SIO_RELEASE_PORT_RESERVATION (configuração de opcode: I, T==3)

Libera uma reserva de runtime para um bloco de portas TCP ou UDP. A reserva de runtime a ser liberada deve ter sido obtida do processo de emissão usando o SIO_ACQUIRE_PORT_RESERVATION IOCTL.

Para obter informações mais detalhadas, consulte a referência de SIO_RELEASE_PORT_RESERVATION .

SIO_RELEASE_PORT_RESERVATION tem suporte no Windows Vista e versões posteriores do sistema operacional.

SIO_ROUTING_INTERFACE_CHANGE (configuração de opcode: I, T==1)

Para receber a notificação de uma alteração de interface de roteamento que deve ser usada para acessar o endereço remoto no buffer de entrada (especificado como uma estrutura sockaddr ). Nenhuma informação de saída sobre a nova interface de roteamento será fornecida após a conclusão deste IOCTL; a conclusão apenas indica que a interface de roteamento de um determinado destino foi alterada e deve ser consultada usando a SIO_ROUTING_INTERFACE_QUERY IOCTL.

Supõe-se, embora não seja necessário, que o aplicativo use E/S sobreposta para ser notificado sobre a alteração da interface de roteamento por meio da conclusão de SIO_ROUTING_INTERFACE_CHANGE solicitação. Como alternativa, se o SIO_ROUTING_INTERFACE_CHANGE IOCTL for emitido em um soquete sem bloqueio com os parâmetros lpOverlapped e lpCompletionRoutine definidos como NULL), ele será concluído retornando imediatamente e WSAEWOULDBLOCK como um erro, e o aplicativo pode aguardar o roteamento de eventos de alteração por meio da chamada para WSAEventSelect ou WSAAsyncSelect com FD_ROUTING_INTERFACE_CHANGE bit definido na máscara de bits do evento de rede.

É reconhecido que as informações de roteamento permanecem estáveis na maioria dos casos, de modo que exigir que o aplicativo mantenha várias IOCTLs pendentes para receber notificações sobre todos os destinos nos quais está interessado, bem como fazer com que o provedor de serviços acompanhe essas solicitações de notificação usará uma quantidade significativa de recursos do sistema. Essa situação pode ser evitada estendendo o significado dos parâmetros de entrada e relaxando os requisitos do provedor de serviços da seguinte maneira:

  • O aplicativo pode especificar um endereço curinga específico da família de protocolos (o mesmo usado em chamada de associação ao solicitar a associação a qualquer endereço disponível) para solicitar notificações de quaisquer alterações de roteamento. Isso permite que o aplicativo mantenha apenas uma SIO_ROUTING_INTERFACE_CHANGE pendente para todos os soquetes e destinos que ele tem e, em seguida, use SIO_ROUTING_INTERFACE_QUERY para obter as informações reais de roteamento.
  • Um provedor de serviços tem a opção de ignorar as informações especificadas pelo aplicativo no buffer de entrada do SIO_ROUTING_INTERFACE_CHANGE (como se o aplicativo especificasse um endereço curinga) e concluir o SIO_ROUTING_INTERFACE_CHANGE ioctl ou sinalizar FD_ROUTING_INTERFACE_CHANGE evento no caso de qualquer alteração de informações de roteamento (não apenas a rota para o destino especificado no buffer de entrada).

SIO_ROUTING_INTERFACE_QUERY (configuração de opcode: I, O, T==1)

Para obter o endereço da interface local (representado como estrutura sockaddr ), que deve ser usado para enviar para o endereço remoto especificado no buffer de entrada (como sockaddr). Endereços multicast remotos podem ser enviados no buffer de entrada para obter o endereço da interface preferencial para transmissão multicast. De qualquer forma, o endereço de interface retornado pode ser usado pelo aplicativo em uma solicitação bind() subsequente.

Observe que as rotas estão sujeitas a alterações. Portanto, os aplicativos não podem contar com as informações retornadas por SIO_ROUTING_INTERFACE_QUERY para serem persistentes. Os aplicativos podem se registrar para roteamento de notificações de alteração por meio do SIO_ROUTING_INTERFACE_CHANGE IOCTL, que fornece notificação por meio de E/S sobreposta ou um evento de FD_ROUTING_INTERFACE_CHANGE. A seguinte sequência de ações pode ser usada para garantir que o aplicativo sempre tenha informações atuais da interface de roteamento para um determinado destino:

  • Problema SIO_ROUTING_INTERFACE_CHANGE IOCTL
  • Problema SIO_ROUTING_INTERFACE_QUERY IOCTL
  • Sempre que SIO_ROUTING_INTERFACE_CHANGE IOCTL notificar a aplicação de alteração de roteamento (por meio de E/S sobreposta ou sinalizando FD_ROUTING_INTERFACE_CHANGE evento), toda a sequência de ações deve ser repetida.

Se o buffer de saída não for grande o suficiente para conter o endereço da interface, SOCKET_ERROR será retornado como resultado desse IOCTL e WSAGetLastError retornará WSAEFAULT. O tamanho necessário do buffer de saída será retornado em lpcbBytesReturned nesse caso. Observe que o código de erro WSAEFAULT também será retornado se o parâmetro lpvInBuffer, lpvOutBuffer ou lpcbBytesReturned não estiver totalmente contido em uma parte válida do espaço de endereço do usuário.

Se o endereço de destino especificado no buffer de entrada não puder ser acessado por meio de nenhuma das interfaces disponíveis, SOCKET_ERROR será retornado como resultado desse IOCTL e WSAGetLastError retornará WSAENETUNREACH ou até mesmo WSAENETDOWN se toda a conectividade de rede for perdida.

SIO_SET_COMPATIBILITY_MODE (configuração de opcode: I, T==3)

Solicita como a pilha de rede deve lidar com determinados comportamentos para os quais a maneira padrão de lidar com o comportamento pode ser diferente entre as versões do Windows. A estrutura do argumento para SIO_SET_COMPATIBILITY_MODE é especificada na estrutura WSA_COMPATIBILITY_MODE definida no arquivo de cabeçalho Mswsockdef.h . Essa estrutura é definida da seguinte maneira:

/* Argument structure for SIO_SET_COMPATIBILITY_MODE */
typedef struct _WSA_COMPATIBILITY_MODE {
    WSA_COMPATIBILITY_BEHAVIOR_ID BehaviorId;
    ULONG TargetOsVersion;
} WSA_COMPATIBILITY_MODE, *PWSA_COMPATIBILITY_MODE;

O valor especificado no membro BehaviorId indica o comportamento solicitado. O valor especificado no membro TargetOsVersion indica a versão do Windows que está sendo solicitada para o comportamento.

O membro BehaviorId pode ser um dos valores do tipo de enumeração WSA_COMPATIBILITY_BEHAVIOR_ID definido no arquivo de cabeçalho Mswsockdef.h . Os valores possíveis para o membro BehaviorId são os seguintes.

Termo Descrição
WsaBehaviorAll
Isso equivale a solicitar todos os possíveis comportamentos compatíveis definidos para WSA_COMPATIBILITY_BEHAVIOR_ID.
WsaBehaviorReceiveBuffering
Quando o membro TargetOsVersion é definido como um valor para o Windows Vista ou posterior, as reduções para o tamanho do buffer de recebimento TCP nesse soquete usando a opção de soquete SO_RCVBUF são permitidas mesmo após o estabelecimento de uma conexão TCP.
Quando o membro TargetOsVersion é definido como um valor anterior ao Windows Vista, as reduções para o tamanho do buffer de recebimento TCP nesse soquete usando a opção de soquete SO_RCVBUF não são permitidas após o estabelecimento da conexão.
WsaBehaviorAutoTuning
Quando o membro TargetOsVersion é definido como um valor para o Windows Vista ou posterior, o ajuste automático da janela de recebimento é habilitado e o fator de escala da janela TCP é reduzido para 2 do valor padrão de 8.
Quando TargetOsVersion é definido como um valor anterior ao Windows Vista, o ajuste automático da janela de recebimento é desabilitado. A opção de dimensionamento da janela TCP também está desabilitada e o tamanho máximo da janela de recebimento verdadeiro é limitado a 65.535 bytes. A opção de dimensionamento de janela TCP não pode ser negociada na conexão mesmo que a opção de soquete SO_RCVBUF tenha sido chamada nesse soquete especificando um valor maior que 65.535 bytes antes da conexão ser estabelecida.

Para obter informações mais detalhadas, consulte a referência de SIO_SET_COMPATIBILITY_MODE .

SIO_SET_COMPATIBILITY_MODE tem suporte no Windows Vista e posteriores.

SIO_SET_GROUP_QOS (configuração de opcode: I, T==1)

Reservado.

SIO_SET_PRIORITY_HINT (configuração de opcode: I, T==3)

Fornece uma dica para o protocolo de transporte subjacente para tratar o tráfego nesse soquete com uma prioridade específica. O lpvInBuffer deve apontar para uma variável do tipo PRIORITY_HINT com cbInBuffer definido como sizeof(PRIORITY_HINT). Os parâmetros lpvOutBuffer e cbOutBuffer devem ser NULL e 0, respectivamente. A implementação do Microsoft Windows TCP dá suporte a esse IOCTL começando com Windows 10, versão 1809 (10.0; Build 17763) e posteriores da seguinte maneira: quando o valor de prioridade solicitado é definido como IoPriorityHintVeryLow, o TCP usa uma versão modificada do algoritmo LEDBAT (definido no RFC 6817) para controlar a taxa de tráfego de saída no soquete. O tráfego de entrada não é afetado por este IOCTL. LEDBAT é um algoritmo de catador, e sua meta é manter a latência baixa e evitar qualquer efeito adverso no tráfego de prioridade normal, saindo do caminho quando o tráfego de prioridade normal estiver presente.

Consulte também RFC 6817.

SIO_SET_PRIORITY_HINT tem suporte no Windows 10, versão 1809 (10.0; Build 17763) e posterior.

SIO_SET_QOS (configuração opcode: I, T==1)

Associe a estrutura de QOS especificada ao soquete. Nenhum buffer de saída é necessário, a estrutura QOS será obtida do buffer de entrada. O código de erro WSAENOPROTOOPT é indicado para provedores de serviços que não dão suporte à qualidade do serviço.

SIO_TCP_INITIAL_RTO (configuração de opcode: I, T==3)

Controla as características de retransmissão inicial (SYN/SYN+ACK) de um soquete TCP configurando parâmetros de RTO (tempo limite de retransmissão inicial). Os parâmetros de configuração são especificados em uma estrutura TCP_INITIAL_RTO_PARAMETERS .

Para obter informações mais detalhadas, consulte a referência de SIO_TCP_INITIAL_RTO . SIO_TCP_INITIAL_RTO tem suporte em Windows 8, Windows Server 2012 e posteriores.

SIO_TIMESTAMPING

Um IOCTL de soquete usado para configurar a recepção de carimbos de data/hora de transmissão de soquete/recebimento. Válido somente para soquetes de datagrama. O tipo de entrada para SIO_TIMESTAMPING é a estrutura TIMESTAMPING_CONFIG .

Consulte também o carimbo de data/hora winsock.

SIO_TRANSLATE_HANDLE (configuração de opcode: I, O, T==1)

Para obter um identificador correspondente para soquetes que é válido no contexto de uma interface complementar (por exemplo, TH_NETDEV e TH_TAPI). Uma constante de manifesto que identifica a interface complementar junto com quaisquer outros parâmetros necessários é especificada no buffer de entrada. O identificador correspondente estará disponível no buffer de saída após a conclusão dessa função. Consulte a seção apropriada em Anexos winsock para obter detalhes específicos de uma interface complementar específica. O código de erro WSAENOPROTOOPT é indicado para provedores de serviços que não dão suporte a esse IOCTL para a interface complementar especificada. Esse IOCTL recupera o identificador associado usando SIO_TRANSLATE_HANDLE.

É recomendável que o COM (Component Object Model) seja usado em vez desse IOCTL para descobrir e rastrear outras interfaces que possam ser compatíveis com um soquete. Este IOCTL está presente para compatibilidade com versões anteriores com sistemas em que COM não está disponível ou não pode ser usado por algum outro motivo.

SIO_UDP_CONNRESET (configuração de opcode: I, T==3)

Windows XP: Controla se as mensagens de PORT_UNREACHABLE UDP são relatadas. Defina como TRUE para habilitar o relatório. Defina como FALSE para desabilitar o relatório.

SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS (configuração de opcode: I, T==3)

Define o registro de redirecionamento para o novo soquete TCP usado para se conectar ao destino final para uso por um serviço de redirecionamento da Plataforma de Filtragem do Windows (WFP).

O SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL é usado como parte do rastreamento de conexão com proxie em conexões de soquete redirecionadas. Esse recurso WFP facilita o acompanhamento de registros de redirecionamento do redirecionamento inicial de uma conexão com a conexão final com o destino.

Para obter informações mais detalhadas, consulte a referência de SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS . SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS tem suporte em Windows 8, Windows Server 2012 e posteriores.

SIO_TCP_INFO (configuração de opcode: I, O, T==3)

Recupera as estatísticas TCP de um soquete. As estatísticas TCP são fornecidas em uma estrutura TCP_INFO_v0 .

Ao contrário da recuperação de estatísticas TCP com a função GetPerTcpConnectionEStats , a recuperação de estatísticas TCP com esse código de controle não exige que o código do usuário carregue, armazene e filtre a tabela de conexões TCP e não exija privilégios elevados para usar.

Para obter mais informações, consulte SIO_TCP_INFO. SIO_TCP_INFO tem suporte no Windows 10, versão 1703, Windows Server 2016 e posterior.

Comentários

Winsock Ioctls são definidos em vários arquivos de cabeçalho diferentes. Isso inclui o arquivo de cabeçalho Winsock2.h, Mswsock.h e Mstcpip.h .

No Microsoft Windows Software Development Kit (SDK) lançado para Windows Vista e posterior, a organização de arquivos de cabeçalho foi alterada e vários Ioctls winsock também são definidos nos arquivos de cabeçalho Ws2def.h, Ws2ipdef.h e Mswsockdef.h . O arquivo de cabeçalho Ws2def.h é incluído automaticamente pelo arquivo de cabeçalho Winsock2.h . O arquivo de cabeçalho Ws2ipdef.h é incluído automaticamente pelo arquivo de cabeçalho Ws2tcpip.h . O arquivo de cabeçalho Mswsockdef.h é incluído automaticamente no arquivo de cabeçalho Mswsockdef.h .

Requisitos

Requisito Valor
parâmetro
Winsock2.h;
Mstcpip.h;
Mswsock.h;
Mswsockdef.h no Windows Vista, Windows Server 2008 e Windows 7 (inclua Mswsock.h);
Ws2def.h no Windows Vista, Windows Server 2008 e Windows 7 (incluem Winsock2.h);
Ws2ipdef.h no Windows Vista, Windows Server 2008 e Windows 7 (inclua Ws2tcpip.h)