Fungsi panggilan balik LPWSPDUPLICATESOCKET (ws2spi.h)
Fungsi
Sintaksis
LPWSPDUPLICATESOCKET Lpwspduplicatesocket;
int Lpwspduplicatesocket(
[in] SOCKET s,
[in] DWORD dwProcessId,
[out] LPWSAPROTOCOL_INFOW lpProtocolInfo,
[out] LPINT lpErrno
)
{...}
Parameter
[in] s
Deskriptor soket lokal.
[in] dwProcessId
Pengidentifikasi proses target tempat soket bersama akan digunakan.
[out] lpProtocolInfo
Pointer ke buffer yang dialokasikan oleh klien yang cukup besar untuk berisi struktur WSAPROTOCOL_INFO. Penyedia layanan menyalin konten struktur informasi protokol ke buffer ini.
[out] lpErrno
Penunjuk ke kode kesalahan.
Mengembalikan nilai
Jika tidak ada kesalahan yang terjadi, LPWSPDuplicateSocket mengembalikan nol. Jika tidak, nilai SOCKET_ERROR dikembalikan, dan nomor kesalahan tertentu tersedia di lpErrno.
Kode Kesalahan | Arti |
---|---|
|
Subsistem jaringan gagal. |
Menunjukkan bahwa salah satu parameter yang ditentukan tidak valid. | |
Pemblokiran panggilan Windows Sockets sedang berlangsung atau penyedia layanan masih memproses fungsi panggilan balik. | |
|
Tidak ada lagi deskriptor soket yang tersedia. |
|
Tidak ada ruang buffer yang tersedia. Soket tidak dapat dibuat. |
|
Deskriptor bukan soket. |
Komentar
Proses sumber memanggil LPWSPDuplicateSocket untuk mendapatkan struktur WSAPROTOCOL_INFO khusus. Ini menggunakan beberapa mekanisme komunikasi antarproses (IPC) untuk meneruskan konten struktur ini ke proses target, yang pada gilirannya menggunakannya dalam panggilan ke LPWSPSocket untuk mendapatkan deskriptor untuk soket duplikat. Perhatikan bahwa struktur WSAPROTOCOL_INFO khusus hanya dapat digunakan sekali oleh proses target.
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 LPWSPSocket dalam konteks proses target. Penyedia kemudian harus mengembalikan deskriptor soket yang mereferensikan soket umum yang mendasar. dwProviderReserved anggota struktur WSAPROTOCOL_INFO tersedia untuk penggunaan penyedia layanan dan dapat digunakan untuk menyimpan informasi konteks yang berguna, termasuk handel duplikat.
Ketika deskriptor soket baru dialokasikan, penyedia sistem file (IFS) yang dapat diinstal harus memanggil WPUModifyIFSHandle, dan penyedia non-IFS harus memanggil WPUCreateSocketHandle. Penyedia IFS dapat menggunakan fungsi
Salah satu skenario yang mungkin untuk membuat dan menggunakan soket bersama dalam mode handoff diilustrasikan dalam hal berikut.
Proses sumber | IPC | Arti |
---|---|---|
|
==> | |
|
3) Menerima permintaan pengidentifikasi proses dan merespons. | |
|
<== | |
|
||
|
||
|
==> | 7) Menerima struktur WSAPROTOCOL_INFO. |
|
8) Memanggil LPWSPSocket untuk membuat deskriptor soket bersama. | |
|
9) Menggunakan soket bersama untuk pertukaran data. | |
<== |
Deskriptor yang mereferensikan soket bersama dapat digunakan secara independen sejauh yang bersangkutan dengan I/O. Namun, antarmuka Windows Sockets tidak menerapkan jenis kontrol akses apa pun, sehingga terserah proses yang terlibat untuk mengoordinasikan operasi mereka pada soket bersama. Penggunaan umum untuk soket bersama adalah memiliki satu proses yang bertanggung jawab untuk membuat soket dan membuat koneksi, menyerahkan soket ke proses lain yang bertanggung jawab atas pertukaran informasi.
Karena yang diduplikasi adalah deskriptor soket dan bukan soket yang mendasar, semua status yang terkait dengan soket diadakan secara umum di semua deskriptor. Misalnya operasi WSPSetSockOpt
Pemberitahuan pada soket bersama tunduk pada batasan LPWSPAsyncSelect dan LPWSPEventSelect. Mengeluarkan salah satu panggilan ini menggunakan salah satu deskriptor bersama membatalkan pendaftaran peristiwa sebelumnya untuk soket, terlepas dari deskriptor mana yang digunakan untuk melakukan pendaftaran tersebut. Jadi, misalnya, soket bersama tidak dapat mengirimkan peristiwa FD_READ untuk memproses A dan FD_WRITE peristiwa untuk memproses B. Untuk situasi ketika koordinasi yang ketat diperlukan, disarankan agar pengembang menggunakan utas alih-alih proses terpisah.
Penyedia layanan berlapis menyediakan implementasi fungsi ini, tetapi juga merupakan klien dari fungsi ini jika dan ketika memanggil LPWSPDuplicateSocket lapisan berikutnya dalam rantai protokol. Beberapa pertimbangan khusus berlaku untuk parameter lpProtocolInfo fungsi ini karena disebarkan ke bawah melalui lapisan rantai protokol.
Jika lapisan berikutnya dalam rantai protokol adalah lapisan lain maka ketika lapisan berikutnya
Salah satu manfaat penting dari kebijakan ini adalah bahwa penyedia layanan dasar tidak perlu menyadari rantai protokol. Kebijakan yang sama ini berlaku saat menyebarkan struktur WSAPROTOCOL_INFO melalui urutan berlapis fungsi lain seperti LPWSPAddressToString, WSPStartup, LPWSPSocket, , atau LPWSPStringToAddress.
Persyaratan
Syarat | Nilai |
---|---|
klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
server minimum yang didukung |
Windows 2000 Server [hanya aplikasi desktop] |
Header |
ws2spi.h |