SIO_LOOPBACK_FAST_PATH código de controlo
Importante O SIO_LOOPBACK_FAST_PATH foi preterido e não é recomendado para ser usado em seu código.
O código de controle de E/S do soquete SIO_LOOPBACK_FAST_PATH permite que um aplicativo WSK configure um soquete TCP para operações mais rápidas na interface de loopback.
Para usar esse IOCTL, um aplicativo WSK chama o função WskControlSocket com os seguintes parâmetros.
Parâmetro | Valor |
---|---|
RequestType |
WskIoctl |
ControlCode |
SIO_LOOPBACK_FAST_PATH |
Nível |
0 |
InputSize |
O tamanho, em bytes, do buffer de entrada. |
InputBuffer |
Um ponteiro para o buffer de entrada. Este parâmetro contém um ponteiro para um valor de booleano que indica se o soquete deve ser configurado para operações de loopback rápidas. |
OutputSize |
0 |
OutputBuffer |
NULL |
OutputSizeReturned |
NULL |
IRP |
Um ponteiro para um IRP. |
Um aplicativo pode usar o IOCTL SIO_LOOPBACK_FAST_PATH para melhorar o desempenho de operações de loopback em um soquete TCP. Esta IOCTL solicita que a pilha TCP/IP use um caminho rápido especial para operações de loopback neste soquete. O SIO_LOOPBACK_FAST_PATH IOCTL só pode ser usado com soquetes TCP. Este IOCTL deve ser usado em ambos os lados da sessão de loopback. O caminho rápido de loopback TCP é suportado usando a interface de loopback IPv4 ou IPv6.
O soquete que planeja iniciar a solicitação de conexão deve aplicar esta IOCTL antes de fazer a solicitação de conexão. O soquete que está escutando a solicitação de conexão deve aplicar esta IOCTL antes de aceitar a conexão.
Depois que um aplicativo estabelece a conexão em uma interface de loopback usando o caminho rápido, todos os pacotes durante o tempo de vida da conexão devem usar o caminho rápido.
Aplicar SIO_LOOPBACK_FAST_PATH a um soquete que será conectado a um caminho sem loopback não terá efeito.
Essa otimização de loopback TCP resulta em pacotes que fluem através da Camada de Transporte (TL) em vez do loopback tradicional através da Camada de Rede. Essa otimização melhora a latência dos pacotes de loopback. Quando um aplicativo optar por uma configuração de nível de conexão para usar o caminho rápido de loopback, todos os pacotes seguirão o caminho de loopback. Para comunicações de loopback, congestionamento e queda de pacotes não são esperados. A noção de controlo de congestionamento e de fornecimento fiável em TCP será desnecessária. Isso, no entanto, não é verdade para o controle de fluxo. Sem controle de fluxo, o remetente pode sobrecarregar o buffer de recebimento, levando a um comportamento de loopback TCP incorreto. O controle de fluxo no caminho de loopback otimizado para TCP é mantido colocando solicitações de envio em uma fila. Quando o buffer de recebimento está cheio, a pilha TCP/IP garante que os envios não serão concluídos até que a fila seja atendida, mantendo o controle de fluxo.
As conexões de loopback de caminho rápido TCP na presença de um texto explicativo da Plataforma de Filtragem do Windows (WFP) para dados de conexão devem usar o caminho lento não otimizado para loopback. Portanto, os filtros WFP impedirão que esse novo caminho rápido de loopback seja usado. Quando um filtro WFP está ativado, o sistema usará o caminho lento mesmo se o IOCTL SIO_LOOPBACK_FAST_PATH foi definido. Isso significa que os aplicativos de modo de usuário têm a capacidade de segurança total do WFP.
Por padrão, SIO_LOOPBACK_FAST_PATH está desabilitado.
Somente um subconjunto das opções de soquete TCP/IP é suportado quando o IOCTL SIO_LOOPBACK_FAST_PATH é usado para habilitar o caminho rápido de loopback em um soquete. A lista de opções suportadas inclui o seguinte:
- IP_TTL
- IP_UNICAST_IF
- IPV6_UNICAST_HOPS
- IPV6_UNICAST_IF
- IPV6_V6ONLY
- SO_CONDITIONAL_ACCEPT
- SO_EXCLUSIVEADDRUSE
- SO_PORT_SCALABILITY
- SO_RCVBUF
- SO_REUSEADDR
- TCP_BSDURGENT
Um aplicativo WSK deve especificar um ponteiro para um IRP e uma rotina de conclusão ao chamar a função WskControlSocket para esse tipo de solicitação. O aplicativo não deve liberar o buffer até que o subsistema WSK tenha concluído o IRP. Quando conclui o IRP, o subsistema invoca a rotina de conclusão. Na rotina de conclusão, o aplicativo deve verificar o status do IRP e liberar todos os recursos que havia alocado anteriormente para a solicitação.
Para obter mais informações sobre o tratamento de IRP do WSK, consulte Usando IRPs com funções do kernel Winsock.
Ao concluir o IRP, o subsistema definirá Irp->IoStatus.Status para STATUS_SUCCESS se a solicitação for bem-sucedida. Caso contrário, Irp->IoStatus.Status será definido como STATUS_INVALID_BUFFER_SIZE ou STATUS_NOT_SUPPORTED se a chamada não for bem-sucedida.
Valor de retorno
Requerimentos
Cliente mínimo suportado |
Janelas 8 |
Servidor mínimo suportado |
Windows Server 2012 |
Cabeçalho |
Mstcpip.h |
IRQL |
PASSIVE_LEVEL |