Udostępnij przez


Inicjowanie połączenia

Gdy przełącznik Windows Sockets odbiera wywołanie WSPConnect zainicjowane przez aplikację, przełącznik porównuje adres docelowy żądania połączenia z adresami w tabeli przełącznika podsieci IP obsługiwanych przez dostawców usług SIECI SAN. Jeśli jedna z tych podsieci zawiera ten adres docelowy, przełącznik wywołuje funkcje WSPSocket i WSPBind odpowiedniego dostawcy usług SAN w celu utworzenia i powiązania gniazda, zgodnie z opisem w Tworzenie i Wiązanie Gniazd SAN. Przełącznik przetwarza żądanie połączenia aplikacji przy użyciu gniazda SIECI SAN. Jeśli adres docelowy żądania połączenia nie znajduje się w podsieci SAN lub jeśli dostawca usług SIECI SAN nie może utworzyć i powiązać gniazda, przełącznik używa dostawcy TCP/IP do nawiązania połączenia.

Na poniższej ilustracji przedstawiono przegląd sposobu, w jaki przełącznik Windows Sockets żąda połączenia z zdalnym elementem równorzędnym. Sekwencja i sekcje, które następują, opisują żądanie połączenia bardziej szczegółowo.

Diagram przedstawiający proces przełącznika Windows Sockets żądającego połączenia z zdalnym elementem równorzędnym.

Po utworzeniu i powiązaniu gniazda SIECI SAN przełącznik wykonuje żądanie połączenia przy użyciu gniazda SIECI SAN w trybie odblokowania, zgodnie z opisem w poniższej procedurze.

Aby wykonać żądanie połączenia

  1. Przełącznik wywołuje funkcję dostawcy usług SAN WSPEventSelect. W tym wywołaniu przełącznik przekazuje kod FD_CONNECT i obiekt zdarzenia do skojarzenia z tym kodem. Wywołanie WSPEventSelect żąda powiadomienia o zdarzeniach związanych z połączeniem i informuje dostawcę usługi SAN, że wszelkie kolejne wywołania WSPConnect są wykonywane w trybie nieblokującym.

  2. Po powrocie funkcji WSPEventSelect przełącznik wywołuje funkcję WSPConnect dostawcy usług SIECI SAN. W tym wywołaniu przełącznik przekazuje adres docelowy w formacie jednej z rodzin adresów WSK. Sterownik proxy dostawcy usług sieci SAN mapuje ten adres docelowy na adres lokalny i próbuje ustanowić połączenie.

  3. Jeśli funkcja WSPConnect dostawcy usług SAN może natychmiast zakończyć operację połączenia, zwraca odpowiedni kod powodzenia lub niepowodzenia. Jeśli funkcja WSPConnect dostawcy usług SIECI SAN nie może natychmiast ukończyć żądania połączenia, operacja połączenia dostawcy usług SIECI SAN będzie kontynuowana asynchronicznie w innym wątku. Funkcja WSPConnect dostawcy usług sieci SAN zwraca błąd WSAEWOULDBLOCK, aby wskazać, że gniazdo jest oznaczone jako nieblokujące i że operacja połączenia nie może być natychmiast ukończona.

  4. Po zakończeniu operacji połączenia dostawca usługi SAN wywołuje funkcję Win32 SetEvent, aby zasygnalizować obiekt zdarzenia, który został wcześniej zarejestrowany w wywołaniu WSPEventSelect.

  5. Po zasygnalizowaniu obiektu zdarzenia, przełącznik wywołuje funkcję WSPEnumNetworkEvents dostawcy usług SAN w celu uzyskania wyniku operacji połączenia.

Uwaga Po nawiązaniu połączenia za pośrednictwem dostawcy usług SIECI SAN przełącznik nie może już używać dostawcy TCP/IP dla tego połączenia. Dostawcy usług SIECI SAN muszą w pełni zaimplementować wszystkie funkcje wymagane do obsługi ustanowionego połączenia.

Niszczenie gniazda SIECI SAN

Jeśli funkcja WSPConnect dostawcy usług SIECI SAN kończy się niepowodzeniem, przełącznik wywołuje funkcję dostawcy usług SIECI SAN WSPCloseSocket, aby zniszczyć gniazdo SIECI SAN. Następnie przełącznik wywołuje funkcję WSPConnect dostawcy usług TCP/IP, aby przekazać operację połączenia do dostawcy usług TCP/IP, chyba że dostawca usług SAN zwrócił jeden z następujących kodów błędów w wyniku operacji połączenia:

WSAECONNRESET
Wskazuje, że żadna aplikacja nie nasłuchuje na określonym porcie pod adresem docelowym

WSAECONNREFUSED
Wskazuje, że aplikacja zdalna aktywnie odmówiła żądania połączenia

WSAEHOSTUNREACH
Wskazuje, że adres docelowy nie istnieje

Powyższe kody błędów gwarantują, że próba nawiązania połączenia za pośrednictwem protokołu TCP/IP również zakończy się niepowodzeniem. Dostawca usług SIECI SAN nie może zwrócić jednego z tych kodów błędów, jeśli nie może dokonać tej gwarancji. Jeśli na przykład komputer docelowy, który nie obsługuje bezpośrednich gniazd systemu Windows istnieje w sieci SAN, ale może komunikować się tylko za pośrednictwem sieci NDIS, dostawca usług SAN nie może zwrócić WSAEHOSTUNREACH w wyniku nieudanego żądania połączenia SAN do tego obiektu docelowego, ponieważ żądanie połączenia za pośrednictwem dostawcy TCP/IP może zakończyć się powodzeniem. W takim przypadku dostawca usług SAN powinien zwrócić wartość WSAETIMEDOUT.

Negocjowanie sesji

Po ustanowieniu połączenia za pośrednictwem dostawcy usług SAN, przełącznik wywołuje funkcję rozszerzenia dostawcy usług SAN WSPRegisterMemory, aby wstępnie zarejestrować pamięć dla tablicy buforu, która ma odbierać przychodzące komunikaty. Przełącznik następnie wywołuje funkcję WSPRecv dostawcy usług SAN do przekazania jednego lub więcej buforów do odbierania danych wiadomości przychodzących z zdalnego węzła. Następnie przełącznik negocjuje sesję z jego zdalnym odpowiednikiem, wymieniając parę komunikatów zawierających początkowe informacje sterowania przepływem. Po wynegocjowaniu sesji przełącznik kończy połączenie WSPConnect zainicjowane przez aplikację. Następnie aplikacja może rozpocząć wysyłanie i odbieranie danych w połączeniu. Aby uzyskać więcej informacji, zobacz Akceptowanie żądań połączeń.

Po nawiązaniu połączenia za pośrednictwem gniazda SIECI SAN przełącznik nie wywołuje funkcji WSPConnect dostawcy usług SAN. Przełącznik wewnętrznie obsługuje aplikacje, które inicjują wywołanie funkcji przełącznika WSPConnect, aby sprawdzić, czy są żądania połączeń.