Oproepen voor een SAN blokkeren
De Windows Sockets-switch verwerkt het blokkeren van oproepen en de annulering van dergelijke aanroepen intern of stuurt deze door naar de TCP/IP-serviceprovider. De switch roept nooit een WSPCancelBlockingCall- functie aan voor een SAN-serviceprovider om een blokkeringsaanvraag te annuleren die wordt uitgevoerd. Daarom hoeft een SAN-serviceprovider geen WSPCancelBlockingCall--functie te implementeren.
De schakelaar verwerkt de volgende blokkerende aanvragen en overeenkomende annuleringen op de volgende manieren:
Wanneer een toepassing aanvraagt om een SAN-socket te verbinden met een specifiek doeladres in de blokkeringsmodus, ontvangt de switch een blokkerende WSPConnect aanroep. De switch stuurt de verbindingsaanvraag in de niet-blokkeringsmodus door naar de juiste WSPConnect--functie van de juiste SAN-serviceprovider. Als de switch deze verbindingsaanvraag om een of andere reden moet annuleren, wordt de WSPCloseSocket-functie van de SAN-serviceprovider aangeroepen. De SAN-serviceprovider moet onmiddellijk de verbindingsaanvraag afbreken en de bronnen voor de socket vrijgeven.
Wanneer de switch een blokkeringsaanvraag ontvangt die is geïnitieerd door een toepassing om een gegevensoverdrachtbewerking uit te voeren op een SAN-socket, stuurt deze de aanvraag voor gegevensoverdracht op een overlappende (niet-blokkeringsde) manier door naar de juiste SAN-serviceprovider. Als de switch bijvoorbeeld een synchrone (blokkerende) WSPSend aanroep ontvangt, wordt de juiste WSPSend--functie van de juiste SAN-serviceprovider aangeroepen op een overlappende (niet-blokkerende) manier. Als de toepassing later de bewerking voor gegevensoverdracht annuleert en de switch controle heeft over de buffer van de toepassing, voltooit de switch de aanvraag van de toepassing met een foutstatus. Als de buffer van de toepassing betrokken is bij een openstaande RDMA-bewerking, wacht de switch totdat de bewerking is voltooid. Als een RDMA-overdracht te lang duurt om te voltooien, roept de switch de WSPCloseSocket-functie van de juiste SAN-dienstverlener aan om de verbinding op een abrupte manier te sluiten en zo voltooiing af te dwingen.
Opmerking Als een toepassing een blokkeringsaanroep annuleert, kan deze niet vertrouwen op een verbinding die behouden blijft. Alleen de WSPCloseSocket-aanroep is gegarandeerd succesvol op de socket na de annulering van een blokkeringsverzoek. Zie de Windows Sockets SPI-documentatie in de Microsoft Windows SDK voor meer informatie.