Udostępnij przez


Akceptowanie żądań połączeń

Jeśli aplikacja wywołuje funkcję WSAAccept, funkcję acceptlub funkcję AcceptEx w celu zaakceptowania przychodzącego żądania połączenia w gnieździe, przełącznik Windows Sockets zawsze przekazuje to wywołanie do dostawcy usług TCP/IP. Jeśli przychodzące żądanie połączenia zostanie dostarczone z sieci innej niż SAN, przepływa przez ścieżkę NDIS i dostawca usług TCP/IP obsługuje je. Jeśli żądanie połączenia zostanie odebrane od zdalnego partnera w sieci SAN, przełącznik pełni rolę pośrednika między dostawcą usług TCP/IP a dostawcą usług sieci SAN w określaniu, czy zaakceptować żądanie połączenia oraz w realizacji funkcji aplikacji WSAAccept, zaakceptowaćlub AcceptEx.

Na poniższej ilustracji przedstawiono przegląd interakcji między przełącznikiem Windows Sockets i dostawcą usług SIECI SAN w celu określenia, czy zaakceptować lub odrzucić przychodzące żądanie połączenia. Sekwencje i sekcje opisane poniżej przedstawiają determinację akceptacji w większych szczegółach.

Diagram przedstawiający interakcję między przełącznikiem Windows Sockets a dostawcą usług SIECI SAN po odebraniu żądania połączenia.

Aby zaakceptować lub odrzucić żądanie połączenia,

  1. Po otrzymaniu żądania połączenia przychodzącego z zdalnego węzła, usługodawca SAN sygnalizuje obiekt zdarzenia zgodnie z opisem w sekcji Nasłuchiwanie połączeń w sieci SAN.

  2. Przełącznik Windows Sockets wywołuje funkcję dostawcy usług SAN WSPEnumNetworkEvents, aby odebrać kod zdarzenia FD_ACCEPT.

  3. Po otrzymaniu kodu zdarzenia FD_ACCEPT przełącznik wywołuje funkcję WSPAccept dostawcy usług SAN, aby zaakceptować lub odrzucić przychodzące żądanie połączenia.

  4. Podczas wywoływania przez przełącznik funkcji WSPAccept dostawcy usług SAN, przełącznik określa funkcję warunku. Dostawca usług SAN musi tę funkcję warunku wywołać w tym samym wątku, w którym została wcześniej wywołana funkcja WSPAccept, przed powrotem z wywołania WSPAccept.

  5. Przełącznik zwraca kod CF_ACCEPT lub CF_REJECT z tej funkcji warunku, aby wskazać, że akceptuje lub odrzuca odpowiednio żądanie połączenia.

Akceptowanie żądania połączenia i tworzenie gniazda akceptującego

Jeśli aplikacja akceptuje przychodzące żądanie połączenia, przełącznik zwraca kod CF_ACCEPT dostawcy usług SIECI SAN w celu ukończenia funkcji warunku przełącznika. Po otrzymaniu CF_ACCEPT dostawca usług SAN inicjuje wewnętrzną strukturę danych, w której przechowuje informacje o gnieździe akceptującym. Funkcja WSPAccept dostawcy usług SAN musi następnie wywołać funkcję WPUCreateSocketHandle, aby uzyskać deskryptor dla akceptowanego gniazda z przełącznika. Dostawca usług SIECI SAN musi przechowywać deskryptor przełącznika w wewnętrznej strukturze danych dla gniazda akceptującego i musi zwrócić własny deskryptor do gniazda akceptującego, aby ukończyć wywołanie WSPAccept. Przełącznik musi dostarczyć wewnętrzny deskryptor dostawcy usług SAN dla gniazda akceptującego podczas wywoływania funkcji dostawcy, a dostawca usług SAN musi dostarczyć deskryptor gniazda przełącznika w wywołaniach zwrotnych do przełącznika.

Przed pomyślnym ukończeniem WSPAccept, dostawca usług SAN powinien wywołać funkcję Win32 ResetEvent, aby zresetować obiekt zdarzenia. Dzięki temu dostawca usług SAN może później wywołać funkcję Win32 SetEvent, aby zasygnalizować przełącznik, aby zaakceptować następne przychodzące żądanie połączenia.

Odrzucanie żądania połączenia

Jeśli aplikacja odrzuci przychodzące żądanie połączenia, przełącznik zwróci kod CF_REJECT dostawcy usług SIECI SAN w celu ukończenia funkcji warunku przełącznika. Po otrzymaniu CF_REJECT dostawca usługi SAN powinien zwrócić kod błędu WSAECONNREFUSED do przełącznika, aby ukończyć wywołanie WSPAccept.

Wskazywanie akceptacji lub odmowy ustanowienia połączenia ze zdalnym partnerem

Zanim dostawca usług SAN może przekazać zdalnemu partnerowi, że akceptuje lub odrzuca jego żądanie połączenia, musi wywołać funkcję warunkową przełącznika. ** W zależności od wartości zwracanej przez funkcję warunku przełącznika, dostawca usług SAN powinien wykonać jeden z następujących sygnałów dla zdalnego węzła.

Jeśli funkcja warunkowa przełącznika zwróci CF_ACCEPT, dostawca usług SAN powinien wskazać, że akceptuje żądanie połączenia urządzenia zdalnego. Dostawca usług SIECI SAN na zdalnym elemencie równorzędnym może następnie pomyślnie ukończyć operację połączenia zainicjowaną przez wywołanie WSPConnect.

Jeśli funkcja warunku przełącznika zwróci CF_REJECT, dostawca usług SAN powinien wskazać, że odrzuca żądanie połączenia od zdalnego partnera. Dostawca usług SAN w zdalnym równorzędnym elemencie musi zakończyć operację łączenia niepowodzeniem, zainicjowaną przez wywołanie WSPConnect z kodem błędu WSAECONNREFUSED.

Negocjowanie sesji

Po pomyślnym użyciu dostawcy usług sieci SAN do zaakceptowania żądania połączenia od zdalnego rówieśnika przełącznik negocjuje sesję z tym rówieśnikiem.

Aby negocjować sesję

  1. Przełącznik na zdalnym węźle wywołuje funkcję WSPRecv dostawcy usług SAN w celu zamieszczenia zestawu buforów odbierających.

  2. Przełącznik po stronie zdalnego równorzędnego węzła wywołuje funkcję WSPSend dostawcy usług SAN, aby wysłać komunikat o negocjacji sesji do przełącznika w lokalnym punkcie końcowym akceptującym. Ten komunikat zawiera liczbę buforów odbiorczych, które przełącznik zdalnego elementu równorzędnego zamieścił.

  3. Przełącznik w lokalnym punkcie końcowym akceptującym wywołuje funkcję WSPRecv u lokalnego dostawcy usług SAN, aby umieścić własne bufory odbiorcze, ale może nie zdążyć zrobić tego na czas, aby odebrać komunikat negocjacji sesji. Jeśli lokalny przełącznik nie opublikuje na czas bufora odbiorczego i jeśli podstawowa karta sieciowa nie obsługuje sterowania przepływem, dostawca usług SAN w lokalnym punkcie końcowym akceptującym musi buforować komunikat negocjacji sesji przełącznika zdalnego we własnych prywatnych buforach odbiorczych. Gdy przełącznik otrzymuje bufory, dostawca usług SAN kopiuje dane ze swoich prywatnych buforów odbiorczych do buforów przełącznika na zasadzie jednego do jednego, aż wszystkie dane zostaną skopiowane z prywatnych buforów do buforów przełącznika.

    Dostawca usług SAN wykonuje normalne przetwarzanie odbioru na kolejnych buforach przełączników, umieszczając wszystkie takie bufory w kolejce odbioru na karcie sieciowej (NIC).

    Należy pamiętać, że dostawca usług SAN nie powinien zrywać połączenia tylko dlatego, że przełącznik nie udostępnił bufora odbiorczego, zanim nadeszła wiadomość negocjacji sesji. Maksymalna długość komunikatu negocjacji sesji wynosi 256 bajtów.

  4. Przełącznik w lokalnym akceptującym punkcie końcowym udostępnia swoje bufory odbiorcze, zanim odpowie na komunikat negocjacji sesji. Przełącznik lokalny wywołuje funkcję WSPSend lokalnego dostawcy usług sieci SAN, aby odpowiedzieć na komunikat negocjacji sesji. Odpowiedź przełącznika lokalnego zawiera liczbę buforów odbiorczych, które zostały zapisane przez przełącznik lokalny. Od tego momentu lokalny przełącznik gwarantuje, że rozesłany zestaw buforów odbiorczych ma wystarczający rozmiar, aby odebrać każdą wiadomość, która przyłącza się do połączenia.

  5. Jeśli aplikacja określa początkowy bufor odbioru w wywołaniu AcceptEx, przełącznik czeka, aż otrzyma pierwszy komunikat od zdalnego partnera, zanim zakończy wywołanie AcceptEx aplikacji.

  6. Jeśli aplikacja anuluje własne zaakceptować wywołanie, przełącznik wywołuje odpowiednią funkcję dostawcy usług SIECI SAN WSPCloseSocket, aby zamknąć akceptujące gniazdo SIECI SAN.