Socket condivisi in SPI
La condivisione dei socket tra processi in Windows Sockets viene implementata come indicato di seguito. Un processo di origine chiama WSPDuplicateSocket per ottenere una struttura WSAPROTOCOL_INFO speciale. Usa un meccanismo di comunicazione interprocesso (IPC) per passare il contenuto di questa struttura a un processo di destinazione. Il processo di destinazione usa quindi la struttura WSAPROTOCOL_INFO in una chiamata a WSPSocket. Il descrittore socket restituito da questa funzione sarà un descrittore socket aggiuntivo a un socket sottostante che diventa così condiviso.
È responsabilità del provider di servizi eseguire le operazioni necessarie nel contesto del processo di origine e creare una struttura WSAPROTOCOL_INFO che verrà riconosciuta quando verrà successivamente visualizzata come parametro per WSPSocket nel contesto dei processi di destinazione. Il membro dwProviderReserved della struttura WSAPROTOCOL_INFO è disponibile per l'uso del provider di servizi e può essere usato per archiviare eventuali informazioni di contesto utili, incluso un handle duplicato.
Questo meccanismo è progettato per essere appropriato per le versioni a thread singolo e preemptive di Windows. Si noti tuttavia che i socket possono essere condivisi tra i thread in un determinato processo senza usare la funzione WSPDuplicateSocket , poiché un descrittore socket è valido in tutti i thread di un processo.
Come descritto nella sezione Descrittore allocazione, quando i nuovi descrittori socket sono allocati provider IFS devono chiamare i provider WPUModifyIFSHandle e non IFS devono chiamare WPUCreateSocketHandle.
Uno scenario possibile per stabilire e usare un socket condiviso in modalità handoff è illustrato nella tabella seguente.
Processo di origine | IPC | Processo di destinazione |
---|---|---|
1) WSPSocket, WSPConnect | ||
2) Richiede l'identificatore del processo di destinazione. | ==> | |
3) Riceve la richiesta di identificatore del processo e risponde. | ||
4) Riceve l'identificatore del processo. | <== | |
5) Chiama WSPDuplicateSocket per ottenere una struttura WSAPROTOCOL_INFO speciale. | ||
6) Invia WSAPROTOCOL_INFO struttura alla destinazione. | ||
==> | 7) Riceve WSAPROTOCOL_INFO struttura. | |
8) Chiama WSPSocket per creare il descrittore di socket condiviso. | ||
9)Usa socket condiviso per lo scambio di dati. | ||
10) WSPClosesocket | <== |
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per