Bagikan melalui


Soket Bersama di SPI

Berbagi soket antara proses di Windows Sockets diimplementasikan sebagai berikut. Proses sumber memanggil WSPDuplicateSocket untuk mendapatkan struktur WSAPROTOCOL_INFO khusus. Ini menggunakan beberapa mekanisme komunikasi antarproses (IPC) untuk meneruskan konten struktur ini ke proses target. Proses target kemudian menggunakan struktur WSAPROTOCOL_INFO dalam panggilan ke WSPSocket. Deskriptor soket yang dikembalikan oleh fungsi ini akan menjadi deskriptor soket tambahan ke soket yang mendasar yang dengan demikian dibagikan.

Penyedia layanan bertanggung jawab untuk melakukan operasi apa pun yang diperlukan dalam konteks proses sumber dan untuk membuat struktur WSAPROTOCOL_INFO yang akan dikenali ketika kemudian muncul sebagai parameter untuk WSPSocket dalam konteks proses target. Anggota dwProviderReserved dari struktur WSAPROTOCOL_INFO tersedia untuk penggunaan penyedia layanan, dan dapat digunakan untuk menyimpan informasi konteks yang berguna, termasuk handel duplikat.

Mekanisme ini dirancang agar sesuai untuk versi Windows multithreaded tunggal dan preemptive. Namun, perhatikan bahwa soket dapat dibagikan di antara utas dalam proses tertentu tanpa menggunakan fungsi WSPDuplicateSocket , karena deskriptor soket valid di semua utas proses.

Seperti yang dijelaskan di bagian Alokasi Deskriptor, ketika deskriptor soket baru dialokasikan penyedia IFS harus memanggil penyedia WPUModifyIFSHandle dan non-IFS harus memanggil WPUCreateSocketHandle.

Salah satu skenario yang mungkin untuk membuat dan menggunakan soket bersama dalam mode handoff diilustrasikan dalam tabel berikut.

Proses sumber IPC Proses tujuan
1) WSPSocket, WSPConnect
2) Meminta pengidentifikasi proses target. ==>
3) Menerima permintaan pengidentifikasi proses dan merespons.
4) Menerima pengidentifikasi proses. <==
5) Memanggil WSPDuplicateSocket untuk mendapatkan struktur WSAPROTOCOL_INFO khusus.
6) Mengirim struktur WSAPROTOCOL_INFO ke target.
==> 7) Menerima struktur WSAPROTOCOL_INFO .
8) Memanggil WSPSocket untuk membuat deskriptor soket bersama.
9)Menggunakan soket bersama untuk pertukaran data.
10) WSPClosesocket <==