Creazione e associazione di socket SAN
Se l'opzione Windows Sockets determina che può instradare i dati tramite una connessione SAN anziché tramite lo stack TCP/IP, richiede al provider di servizi SAN appropriato di creare, associare e impostare le opzioni per un socket in cui è possibile trasferire i dati.
Il socket creato dal provider di servizi SAN è un complementare al socket da cui il provider di servizi TCP/IP creato alla richiesta dell'applicazione, da o a cui vengono trasferiti i dati. Il socket complementare creato dal provider di servizi SAN ha le stesse opzioni del socket creato dal provider di servizi TCP/IP, se il provider di servizi SAN supporta tali opzioni.
Il socket complementare ha anche lo stesso indirizzo IP e la porta TCP del socket creato dal provider di servizi TCP/IP. I dati SAN vengono trasferiti tramite il socket complementare creato dal provider di servizi SAN anziché il socket creato dal provider di servizi TCP/IP. Il socket SAN non è visibile all'applicazione. Dal punto di vista dell'applicazione, i dati vengono trasferiti sul socket che ha richiesto di creare per il trasferimento dei dati.
Nota L'opzione usa sempre il provider di servizi TCP/IP per trasferire i dati su socket non elaborati. Il commutatore non richiede quindi mai a un provider di servizi SAN di creare un socket non elaborato.
La figura seguente mostra una panoramica del modo in cui l'opzione Windows Sockets crea un socket complementare. La sequenza nelle sezioni che seguono descrivono la creazione di un socket complementare in modo più dettagliato.
Avvio della creazione di un socket TCP/IP
Dopo che l'opzione Windows Sockets riceve una chiamata WSPSocket avviata da un'applicazione, il commutatore chiama la funzione WSPSocket del provider TCP/IP per richiedere al provider TCP/IP di creare un socket.
L'opzione Windows Sockets restituisce il descrittore per il socket creato all'applicazione e archivia questo descrittore in una struttura di dati privata associata al socket.
Dal punto di vista dell'applicazione, il socket creato dal provider TCP/IP è il socket usato per i trasferimenti di dati, indipendentemente dal fatto che il commutatore usi il provider di servizi TCP/IP o il provider di servizi SAN per trasferire i dati.
Associazione di un socket TCP/IP
L'opzione riceve una chiamata WSPBind se un'applicazione richiede di associare il socket a un controller di interfaccia di rete (NIC) specifico o all'indirizzo IP con caratteri jolly (0.0.0.0). Un socket associato all'indirizzo IP con caratteri jolly può restare in ascolto delle richieste di connessione in ingresso da tutte le schede di interfaccia di rete.
Nota A partire da Windows Vista, l'indirizzo IP con caratteri jolly 0.0.0.0 non è disponibile. A partire da Windows Vista, se la chiave del Registro di sistema IPAutoconfigurationEnabled è impostata su 0, l'assegnazione automatica degli indirizzi IP è disabilitata e non viene assegnato alcun indirizzo IP. In questo caso, lo strumento da riga di comando ipconfig non visualizzerà un indirizzo IP. Se la chiave è impostata su un valore diverso da zero, viene assegnato automaticamente un indirizzo IP. Questa chiave può trovarsi nei percorsi seguenti nel Registro di sistema:
HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\IPAutoconfigurationEnabled
HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\Interfaces\GUID\IPAutoconfigurationEnabled
L'opzione inoltra questa chiamata al provider di servizi TCP/IP chiamando la funzione WSPBind del provider TCP/IP.
Determinazione del provider di servizi
L'opzione determina se usare un provider di servizi SAN per il trasferimento dei dati su un socket dopo che l'applicazione avvia una chiamata WSPListen o WSPConnect all'opzione, come descritto in Configurazione di una connessione SAN.
Se l'opzione determina che non può usare un provider di servizi SAN per un trasferimento dati, l'opzione instrada il trasferimento dei dati tramite il provider di servizi TCP/IP.
Se l'opzione sceglie un provider di servizi SAN per gestire il socket di un'applicazione, l'opzione chiama la funzione WSPSocket del provider di servizi SAN per creare un socket complementare.
Avvio della creazione di un socket complementare
La funzione WSPSocket del provider di servizi SAN inizializza una struttura di dati interna in cui archivia le informazioni sul socket complementare.
La funzione WSPSocket del provider di servizi SAN deve chiamare successivamente la funzione WPUCreateSocketHandle per acquisire un descrittore socket dall'opzione.
Il provider di servizi SAN deve archiviare il descrittore socket del commutatore nella struttura dei dati interna per il socket complementare e deve restituire il proprio descrittore affinché il socket complementare completi la chiamata WSPSocket . Il descrittore socket restituito dal provider di servizi SAN può essere qualsiasi valore significativo, ad esempio un puntatore a una struttura di dati privata.
Per eseguire un'operazione sul socket, l'opzione fornisce il descrittore socket restituito dal provider di servizi SAN alla funzione appropriata del provider di servizi SAN. Analogamente, il provider di servizi SAN deve fornire il descrittore socket acquisito dal commutatore nella chiamata WPUCreateSocketHandle se il provider di servizi SAN effettua una delle chiamate seguenti:
WPUQuerySocketHandleContext
WPUCloseSocketHandle
WPUCompleteOverlappedRequest
Associazione di un socket complementare
Se la funzione WSPSocket di un provider di servizi SAN viene completata correttamente, l'opzione chiama immediatamente la funzione WSPBind del provider di servizi SAN per assegnare un indirizzo IP locale e una porta TCP al socket.
L'opzione assegna lo stesso indirizzo IP e la porta TCP al socket SAN assegnato al socket creato dal provider TCP/IP. Il provider di servizi SAN deve convertire questo indirizzo TCP/IP nel formato nativo.
L'opzione fornisce un indirizzo IP completo e una porta TCP (ovvero valori diversi da zero) alla funzione WSPBind del provider di servizi SAN, a meno che un'applicazione non abbia richiesto di ascoltare le connessioni in ingresso da tutte le schede di interfaccia di rete. Nel caso successivo, l'opzione fornisce l'indirizzo IP con caratteri jolly alla funzione WSPBind del provider di servizi SAN.
Impostazione delle opzioni per un socket complementare
- Se l'applicazione ha specificato opzioni socket, l'opzione archivia tali opzioni. Dopo aver creato il socket SAN, l'opzione chiama la funzione WSPSetSockOpt del provider di servizi SAN per ogni opzione supportata specificata dall'applicazione per impostare immediatamente queste opzioni per il socket SAN.
Errore di una chiamata socket complementare
- Se un provider di servizi SAN non riesce una delle chiamate precedenti alle funzioni WSPSocket, WSPBind o WSPSetSockOpt , l'opzione chiama la funzione WSPCloseSocket del provider di servizi SAN per eliminare definitivamente il socket SAN. L'opzione usa quindi il provider TCP/IP per continuare a gestire il socket dell'applicazione. Si noti che, dopo che il commutatore stabilisce una connessione usando un provider di servizi SAN, l'opzione non può usare il provider TCP/IP per gestire il socket dell'applicazione. In questo caso, l'opzione restituisce l'errore appropriato all'applicazione.
Connessione del socket complementare
- Dopo che il commutatore configura il socket complementare, l'opzione chiama la funzione WSPListen o WSPConnect per consentire al provider di servizi SAN di eseguire l'operazione che ha causato la configurazione del socket da parte del provider di servizi SAN. Ad esempio, se un'applicazione ha originariamente richiesto di restare in ascolto delle connessioni in ingresso, l'opzione chiama la funzione WSPListen del provider di servizi SAN.