Compartilhar via


Criando e associando soquetes SAN

Se o comutador do Windows Sockets determinar que ele pode rotear dados por meio de uma conexão SAN em vez de por meio da pilha TCP/IP, ele solicitará que o provedor de serviços SAN apropriado crie, associe e defina opções para um soquete no qual os dados podem ser transferidos.

O soquete criado pelo provedor de serviços SAN é um complemento para o soquete que o provedor de serviços TCP/IP criou a pedido do aplicativo, seja do ou para o qual os dados estão sendo transferidos. O soquete complementar criado pelo provedor de serviços SAN tem as mesmas opções que o soquete criado pelo provedor de serviços TCP/IP, se o provedor de serviços SAN der suporte a essas opções.

O soquete complementar também tem o mesmo endereço IP e porta TCP que o soquete criado pelo provedor de serviços TCP/IP. Os dados san são transferidos por meio do soquete complementar criado pelo provedor de serviços SAN em vez do soquete criado pelo provedor de serviços TCP/IP. O soquete SAN não está visível para o aplicativo. Da perspectiva do aplicativo, os dados são transferidos no soquete que ele solicitou para ser criado para a transferência de dados.

Nota A opção sempre usa o provedor de serviços TCP/IP para transferir dados por soquetes brutos. Portanto, a opção nunca solicita que um provedor de serviços SAN crie um soquete bruto.

A figura a seguir mostra uma visão geral de como o comutador do Windows Sockets cria um soquete complementar. A sequência nas seções a seguir descreve a criação de um soquete complementar com mais detalhes.

Diagrama que mostra uma visão geral de como o comutador do Windows Sockets cria um soquete complementar.

Iniciando a criação de um soquete TCP/IP

  1. Depois que a opção Windows Sockets recebe uma chamada WSPSocket iniciada por um aplicativo, a opção chama a função WSPSocket do provedor TCP/IP para solicitar que o provedor TCP/IP crie um soquete.

  2. A opção Windows Sockets retorna o descritor do soquete criado para o aplicativo e armazena esse descritor em uma estrutura de dados privada associada ao soquete.

    Do ponto de vista do aplicativo, o soquete criado pelo provedor TCP/IP é o soquete usado para transferências de dados, independentemente de a opção usar o provedor de serviços TCP/IP ou o provedor de serviços SAN para transferir os dados.

Associando um soquete TCP/IP

  1. A opção receberá uma chamada WSPBind se um aplicativo solicitar a associação do soquete a um NIC (controlador de interface de rede) específico ou ao endereço IP curinga (0.0.0.0). Um soquete associado ao endereço IP curinga pode escutar solicitações de conexão de entrada de todas as NICs.

    Nota A partir do Windows Vista, o endereço IP curinga 0.0.0.0 não está disponível. Também começando com o Windows Vista, se a chave do Registro IPAutoconfigurationEnabled estiver definida como um valor de 0, a atribuição automática de endereço IP será desabilitada e nenhum endereço IP será atribuído. Nesse caso, a ferramenta de linha de comando ipconfig não exibirá um endereço IP. Se a chave for definida como um valor diferente de zero, um endereço IP será atribuído automaticamente. Essa chave pode estar localizada nos seguintes caminhos no Registro:

    HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\IPAutoconfigurationEnabled

    HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\Interfaces\GUID\IPAutoconfigurationEnabled

  2. A opção encaminha essa chamada para o provedor de serviços TCP/IP chamando a função WSPBind do provedor TCP/IP.

Determinação do provedor de serviços

  1. A opção determina se um provedor de serviços SAN deve ser usado para transferência de dados em um soquete depois que o aplicativo inicia uma chamada WSPListen ou WSPConnect para a opção, conforme descrito em Configurando uma conexão SAN.

  2. Se a opção determinar que não pode usar um provedor de serviços SAN para uma transferência de dados, a opção roteia a transferência de dados por meio do provedor de serviços TCP/IP.

  3. Se a opção escolher um provedor de serviços SAN para atender ao soquete de um aplicativo, a opção chamará a função WSPSocket do provedor de serviços SAN para criar um soquete complementar.

Iniciando a criação de um soquete complementar

  1. A função WSPSocket do provedor de serviços SAN inicializa uma estrutura de dados interna na qual armazena informações sobre o soquete complementar.

  2. A função WSPSocket do provedor de serviços SAN deve chamar em seguida a função WPUCreateSocketHandle para adquirir um descritor de soquete do comutador.

  3. O provedor de serviços SAN deve armazenar o descritor de soquete do comutador em sua estrutura de dados interna para o soquete complementar e deve retornar seu próprio descritor para que o soquete complementar conclua a chamada WSPSocket . O descritor de soquete retornado pelo provedor de serviços SAN pode ser qualquer valor significativo, como um ponteiro para uma estrutura de dados privada.

  4. Para executar uma operação no soquete, o comutador fornece o descritor de soquete que foi retornado pelo provedor de serviços SAN para a função apropriada do provedor de serviços SAN. Da mesma forma, o provedor de serviços SAN deve fornecer o descritor de soquete que foi adquirido da opção na chamada WPUCreateSocketHandle se o provedor de serviços SAN fizer qualquer uma das seguintes chamadas:

    WPUQuerySocketHandleContext

    WPUCloseSocketHandle

    Wpucompleteoverlappedrequest

Associando um soquete complementar

  1. Se a função WSPSocket de um provedor de serviços SAN for concluída com êxito, a opção chamará imediatamente a função WSPBind do provedor de serviços SAN para atribuir um endereço IP local e uma porta TCP ao soquete.

  2. A opção atribui o mesmo endereço IP e porta TCP ao soquete SAN que foi atribuído ao soquete que foi criado pelo provedor TCP/IP. O provedor de serviços SAN deve converter esse endereço TCP/IP em seu formato nativo.

  3. A opção fornece um endereço IP totalmente qualificado e uma porta TCP (ou seja, valores não zero) para a função WSPBind do provedor de serviços SAN, a menos que um aplicativo solicitado a escutar conexões de entrada de todas as NICs. No caso posterior, a opção fornece o endereço IP curinga para a função WSPBind do provedor de serviços SAN.

Definindo opções para um soquete complementar

  • Se o aplicativo especificou qualquer opção de soquete, a opção armazena essas opções. Depois de criar o soquete SAN, a opção chama a função WSPSetSockOpt do provedor de serviços SAN para cada opção com suporte especificada pelo aplicativo para definir imediatamente essas opções para o soquete SAN.

Falha em uma chamada de soquete complementar

  • Se um provedor de serviços SAN falhar em qualquer uma das chamadas anteriores para suas funções WSPSocket, WSPBind ou WSPSetSockOpt , a opção chamará a função WSPCloseSocket do provedor de serviços SAN para destruir o soquete SAN. Em seguida, a opção usa o provedor TCP/IP para continuar atendendo o soquete do aplicativo. Observe que, depois que a opção estabelece uma conexão usando um provedor de serviços SAN, a opção não pode usar o provedor TCP/IP para atender ao soquete do aplicativo. Nesse caso, a opção retorna o erro apropriado para o aplicativo.

Conectando o soquete complementar

  • Depois que a opção configura o soquete complementar, a opção chama a função WSPListen ou WSPConnect para que o provedor de serviços SAN execute a operação que fez com que o provedor de serviços SAN configurasse originalmente o soquete. Por exemplo, se um aplicativo originalmente solicitado a escutar conexões de entrada, a opção chamará a função WSPListen do provedor de serviços SAN.