Iniciando uma conexão
Depois que a opção Windows Sockets recebe uma chamada WSPConnect iniciada por um aplicativo, a opção compara o endereço de destino da solicitação de conexão com endereços na tabela de sub-redes IP do comutador que os provedores de serviços SAN atendem. Se uma dessas sub-redes incluir esse endereço de destino, a opção chamará as funções WSPSocket e WSPBind do provedor de serviço san correspondente para criar e associar um soquete, conforme descrito em Criando e associando soquetes SAN. A opção 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 criar e associar um soquete, a opção usará o provedor TCP/IP para estabelecer a conexão.
A figura a seguir mostra uma visão geral de como a opção Soquetes do Windows solicita uma conexão com um par remoto. A sequência e as seções a seguir descrevem a solicitação de conexão com mais detalhes.
Depois de criar e associar o soquete SAN, o comutador executa uma solicitação de conexão, usando o soquete SAN no modo sem bloqueio, conforme descrito no procedimento a seguir.
Para executar uma solicitação de conexão
A opção chama a função WSPEventSelect do provedor de serviços SAN. Nessa chamada, a opção passa o código FD_CONNECT e o objeto de evento a ser associado a esse código. A chamada para WSPEventSelect solicita a notificação de eventos de conexão e informa ao provedor de serviços SAN que qualquer chamada WSPConnect subsequente é executada no modo sem bloqueio.
Depois que a função WSPEventSelect retorna, a opção chama a função WSPConnect do provedor de serviços SAN. Nessa chamada, a opção passa o endereço de destino no formato de uma das famílias de endereços do WSK. O driver proxy do provedor de serviços SAN mapeia esse endereço de destino para um endereço nativo e tenta estabelecer a conexão.
Se a função 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 WSPConnect do provedor de serviços SAN não puder concluir uma solicitação de conexão imediatamente, a operação de conexão do provedor de serviços SAN continuará de forma assíncrona em outro thread. A função WSPConnect do provedor de serviços SAN retorna com o erro WSAEWOULDBLOCK para indicar que o soquete está marcado como não desbloqueado e que a operação de conexão não pode ser concluída imediatamente.
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 .
Depois que o objeto de evento é sinalizado, a opção chama a função WSPEnumNetworkEvents do provedor de serviços SAN para obter o resultado da operação de conexão.
Nota Depois que a opção estabelecer uma conexão por meio de um provedor de serviços SAN, a opção não poderá mais usar o provedor TCP/IP para essa conexão. Os provedores de serviços 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 SAN falhar, a opção chamará a função WSPCloseSocket do provedor de serviços SAN para destruir o soquete SAN. Em seguida, a opção chama a função 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 tenha retornado um dos seguintes códigos de erro como resultado de sua operação de conexão:
WSAECONNRESET
Indica que nenhum aplicativo 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
Esses códigos de erro anteriores garantem que uma tentativa de estabelecer a conexão por meio de TCP/IP também falhará. Um provedor de serviços SAN não deverá retornar um desses códigos de erro se não puder fazer essa garantia. Por exemplo, se um computador de destino que não dá suporte ao Windows Sockets Direct existir na SAN, mas só puder se comunicar por meio do 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 porque uma solicitação de conexão por meio do provedor TCP/IP pode ter êxito. Nesse caso, o provedor de serviços SAN deve retornar WSAETIMEDOUT.
Negociação de Sessão
Depois que a opção estabelece uma conexão por meio de um provedor de serviços SAN, a opção chama a função de extensão WSPRegisterMemory do provedor de serviços SAN para pré-registrar a memória da matriz de buffers que deve receber mensagens de entrada. A opção em seguida chama a função WSPRecv do provedor de serviços SAN para postar um ou mais buffers para receber dados de mensagem de entrada do par remoto. Em seguida, a opção negocia uma sessão com seu par remoto trocando um par de mensagens que contêm informações iniciais de controle de fluxo. Depois que a opção negocia uma sessão, ela conclui a chamada WSPConnect iniciada pelo aplicativo. Em seguida, o aplicativo pode 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, a opção não chama a função WSPConnect do provedor de serviços SAN. A opção manipula internamente aplicativos que iniciam uma chamada para a função WSPConnect do comutador para sondar solicitações de conexão.