Avvio di una connessione
Dopo che l'opzione Windows Sockets riceve una chiamata WSPConnect avviata da un'applicazione, l'opzione confronta l'indirizzo di destinazione della richiesta di connessione con gli indirizzi nella tabella delle subnet IP che i provider di servizi SAN servono. Se una di queste subnet include questo indirizzo di destinazione, l'opzione chiama le funzioni WSPSocket e WSPBind del provider di servizi SAN corrispondente per creare e associare un socket, come descritto in Creazione e associazione di socket SAN. L'opzione elabora la richiesta di connessione dell'applicazione usando il socket SAN. Se l'indirizzo di destinazione della richiesta di connessione non si trova in una subnet SAN o se il provider di servizi SAN non riesce a creare e associare un socket, l'opzione usa il provider TCP/IP per stabilire la connessione.
Nella figura seguente viene illustrata una panoramica del modo in cui l'opzione Windows Sockets richiede una connessione con un peer remoto. Le sezioni e la sequenza che seguono descrivono la richiesta di connessione in modo più dettagliato.
Dopo la creazione e l'associazione del socket SAN, l'opzione esegue una richiesta di connessione usando il socket SAN in modalità non sbloccante, come descritto nella procedura seguente.
Per eseguire una richiesta di connessione
L'opzione chiama la funzione WSPEventSelect del provider di servizi SAN. In questa chiamata, l'opzione passa il codice FD_CONNECT e l'oggetto evento da associare a tale codice. La chiamata a WSPEventSelect richiede la notifica degli eventi di connessione e informa il provider di servizi SAN che qualsiasi chiamata WSPConnect successiva viene eseguita in modalità non di blocco.
Dopo che la funzione WSPEventSelect restituisce , l'opzione chiama la funzione WSPConnect del provider di servizi SAN. In questa chiamata, l'opzione passa l'indirizzo di destinazione nel formato di una delle famiglie di indirizzi WSK. Il driver proxy del provider di servizi SAN esegue il mapping di questo indirizzo di destinazione a un indirizzo nativo e tenta di stabilire la connessione.
Se la funzione WSPConnect del provider di servizi SAN può completare o interrompere immediatamente l'operazione di connessione, restituisce il codice di esito positivo o negativo appropriato. Se la funzione WSPConnect del provider di servizi SAN non può completare immediatamente una richiesta di connessione, l'operazione di connessione del provider di servizi SAN procede in modo asincrono in un altro thread. La funzione WSPConnect del provider di servizi SAN restituisce con l'errore WSAEWOULDBLOCK per indicare che il socket è contrassegnato come non bloccante e che l'operazione di connessione non può essere completata immediatamente.
Al termine dell'operazione di connessione, il provider di servizi SAN chiama la funzione Win32 SetEvent per segnalare l'oggetto evento registrato in precedenza nella chiamata WSPEventSelect .
Dopo aver segnalato l'oggetto evento, l'opzione chiama la funzione WSPEnumNetworkEvents del provider di servizi SAN per ottenere il risultato dell'operazione di connessione.
Nota Dopo che il commutatore stabilisce una connessione tramite un provider di servizi SAN, l'opzione non può più usare il provider TCP/IP per tale connessione. I provider di servizi SAN devono implementare completamente tutte le funzionalità necessarie per il servizio di una connessione stabilita.
Distruggere il socket SAN
Se la funzione WSPConnect del provider di servizi SAN ha esito negativo, il commutatore chiama la funzione WSPCloseSocket del provider di servizi SAN per eliminare il socket SAN. L'opzione chiama quindi la funzione WSPConnect del provider di servizi TCP/IP per inoltrare l'operazione di connessione al provider di servizi TCP/IP, a meno che il provider di servizi SAN non restituisce uno dei codici di errore seguenti come risultato dell'operazione di connessione:
WSAECONNRESET
Indica che nessuna applicazione è in ascolto sulla porta specificata all'indirizzo di destinazione
WSAECONNREFUSED
Indica che l'applicazione remota ha rifiutato attivamente la richiesta di connessione
WSAEHOSTUNREACH
Indica che l'indirizzo di destinazione non esiste
Questi codici di errore precedenti garantiscono che un tentativo di stabilire la connessione tramite TCP/IP avrà esito negativo. Un provider di servizi SAN non deve restituire uno di questi codici di errore se non può rendere tale garanzia. Ad esempio, se un computer di destinazione che non supporta Windows Sockets Direct esiste sulla san, ma può comunicare solo tramite NDIS, il provider di servizi SAN non può restituire WSAEHOSTUNREACH come risultato di una richiesta di connessione SAN non riuscita a questa destinazione perché una richiesta di connessione tramite il provider TCP/IP potrebbe avere esito positivo. In questo caso, il provider di servizi SAN deve restituire WSAETIMEDOUT.
Negoziazione sessione
Dopo aver stabilito una connessione tramite un provider di servizi SAN, il commutatore chiama la funzione di estensione WSPRegisterMemory del provider di servizi SAN per preregisterMemory per la registrazione della memoria per la matrice di buffer che deve ricevere messaggi in ingresso. L'opzione chiama quindi la funzione WSPRecv del provider di servizi SAN per pubblicare uno o più buffer per ricevere i dati dei messaggi in arrivo dal peer remoto. L'opzione negozia quindi una sessione con il peer remoto scambiando una coppia di messaggi che contengono informazioni di controllo del flusso iniziale. Dopo che l'opzione negozia una sessione, completa la chiamata WSPConnect avviata dall'applicazione. L'applicazione può quindi iniziare a inviare e ricevere dati sulla connessione. Per altre informazioni, vedere Accettazione delle richieste di connessione.
Dopo aver stabilito una connessione su un socket SAN, l'opzione non chiama la funzione WSPConnect del provider di servizi SAN. L'opzione gestisce internamente le applicazioni che avviano una chiamata alla funzione WSPConnect del commutatore per eseguire il polling delle richieste di connessione.