Partilhar via


Iniciando uma conexão

Depois que o switch Windows Sockets recebe uma chamada de WSPConnect iniciada por um aplicativo, o switch compara o endereço de destino da solicitação de conexão com os endereços na tabela de sub-redes IP do switch que os provedores de serviços SAN servem. Se uma dessas sub-redes incluir esse endereço de destino, o switch chamará as funções WSPSocket e WSPBind do provedor de serviços SAN correspondente para criar e associar um soquete, conforme descrito em Criação e Vinculação de Soquetes de SAN. O switch processa a solicitação de conexão do aplicativo usando o soquete SAN. Se o endereço de destino da solicitação de conexão não estiver em uma sub-rede SAN ou se o provedor de serviços SAN não conseguir criar e vincular um soquete, o switch usará o provedor TCP/IP para estabelecer a conexão.

A figura a seguir mostra uma visão geral de como o comutador de Windows Sockets solicita uma ligação com um par remoto. A sequência e as seções a seguir descrevem a solicitação de conexão com mais detalhes.

Diagrama que mostra o processo de comutador de Windows Sockets solicitando uma ligação com um par remoto.

Depois de criar e vincular o soquete SAN, o switch executa uma solicitação de conexão, usando o soquete SAN em modo sem bloqueio, conforme descrito no procedimento a seguir.

Para executar uma solicitação de conexão

  1. O switch chama a função WSPEventSelect do provedor de serviços SAN. Nessa chamada, o switch passa o código FD_CONNECT e o objeto de evento a ser associado a esse código. A chamada para WSPEventSelect solicita notificação de eventos de conexão e informa ao provedor de serviços SAN que qualquer chamada subsequente de WSPConnect executa-se no modo sem bloqueio.

  2. Depois que a função WSPEventSelect retorna, o switch chama a função WSPConnect do provedor de serviços SAN. Nesta chamada, o switch passa o endereço de destino no formato de uma das famílias de endereços WSK. O driver de proxy do provedor de serviços SAN mapeia esse endereço de destino para um endereço nativo e tenta estabelecer a conexão.

  3. Se a função de WSPConnect do provedor de serviços SAN puder concluir ou falhar a operação de conexão imediatamente, ela retornará o código de êxito ou falha apropriado. Se a função de WSPConnect do provedor de serviços de SAN não puder concluir uma solicitação de conexão imediatamente, a operação de conexão do provedor de serviços de SAN prosseguirá de forma assíncrona em outro thread. A função de WSPConnect do provedor de serviços SAN retorna com o erro WSAEWOULDBLOCK para indicar que o soquete está marcado como sem bloqueio e que a operação de conexão não pode ser concluída imediatamente.

  4. Após a conclusão da operação de conexão, o provedor de serviços SAN chama a função Win32 SetEvent para sinalizar o objeto de evento que foi registrado anteriormente na chamada WSPEventSelect.

  5. Depois que o objeto de evento é sinalizado, o switch chama a função WSPEnumNetworkEvents de do fornecedor de serviços SAN para obter o resultado da operação de conexão.

Nota Depois que o switch estabelece uma conexão por meio de um provedor de serviços SAN, o switch não pode mais usar o provedor TCP/IP para essa conexão. Os provedores de serviços de SAN devem implementar totalmente todas as funcionalidades necessárias para atender a uma conexão estabelecida.

Destruindo o soquete SAN

Se a função WSPConnect do provedor de serviços de SAN falhar, o switch chamará a função WSPCloseSocket do provedor de serviços de SAN para destruir o soquete de SAN. Em seguida, o switch chama a função de WSPConnect do provedor de serviços TCP/IP para encaminhar a operação de conexão para o provedor de serviços TCP/IP, a menos que o provedor de serviços SAN retorne um dos seguintes códigos de erro como resultado de sua operação de conexão:

WSAECONNRESET
Indica que nenhuma aplicação está escutando na porta especificada no endereço de destino

WSAECONNREFUSED
Indica que o aplicativo remoto recusou ativamente a solicitação de conexão

WSAEHOSTUNREACH
Indica que o endereço de destino não existe

Estes códigos de erro anteriores garantem que uma tentativa de estabelecer a ligação através de TCP/IP também falhará. Um provedor de serviços SAN não deve retornar um desses códigos de erro se não puder fazer essa garantia. Por exemplo, se existir um computador de destino que não ofereça suporte ao Windows Sockets Direct na SAN, mas só possa se comunicar por meio de NDIS, o provedor de serviços SAN não poderá retornar WSAEHOSTUNREACH como resultado de uma solicitação de conexão SAN com falha para esse destino, pois uma solicitação de conexão por meio do provedor TCP/IP poderá ter êxito. Nesse caso, o provedor de serviços de SAN deve retornar WSAETIMEDOUT.

Sessão de Negociação

Depois que o switch estabelece uma conexão por meio de um provedor de serviços de SAN, o switch chama a função de extensão WSPRegisterMemory do provedor de serviços de SAN para pré-registrar a memória para a matriz de buffer que receberá mensagens de entrada. Em seguida, o switch chama a função WSPRecv do provedor de serviços SAN para postar um ou mais buffers destinados a receber dados de mensagens de entrada do peer remoto. Em seguida, o switch negocia uma sessão com seu par remoto trocando um par de mensagens que contêm informações iniciais de controle de fluxo. Após o switch negociar uma sessão, ele conclui a chamada WSPConnect iniciada pelo aplicativo. O aplicativo pode então começar a enviar e receber dados na conexão. Para obter mais informações, consulte Aceitando solicitações de conexão.

Depois que uma conexão é estabelecida em um soquete SAN, o switch não chama a função WSPConnect do provedor de serviços SAN. O switch lida internamente com aplicações que iniciam uma chamada para a função WSPConnect do switch para monitorizar solicitações de conexão.