Soket Bersama
Fungsi WSADuplicateSocket diperkenalkan untuk mengaktifkan berbagi soket di seluruh proses. Proses sumber memanggil WSADuplicateSocket untuk mendapatkan struktur WSAPROTOCOL_INFO khusus untuk pengidentifikasi proses target. 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. Soket dapat dibagikan di antara utas dalam proses tertentu tanpa menggunakan fungsi WSADuplicateSocket karena deskriptor soket valid di semua utas proses.
Dua deskriptor (atau lebih) yang mereferensikan soket bersama dapat digunakan secara independen sejauh yang bersangkutan. Namun, antarmuka Winsock tidak menerapkan jenis kontrol akses apa pun, sehingga proses harus mengoordinasikan operasi apa pun pada soket bersama. Contoh umum berbagi soket adalah menggunakan satu proses untuk membuat soket dan membuat koneksi. Proses ini kemudian menyerahkan soket ke proses lain yang bertanggung jawab atas pertukaran informasi.
FungsiWSADuplicateSocketmembuat deskriptor soket dan bukan soket yang mendasar. Akibatnya, semua status yang terkait dengan soket disimpan bersama di semua deskriptor. Misalnya, operasisetsockoptyang dilakukan menggunakan satu deskriptor kemudian terlihat menggunakangetsockopt dari salah satu atau semua deskriptor. Proses dapat memanggil closesocket pada soket duplikat dan deskriptor akan dibatalkan alokasinya. Soket yang mendasar, bagaimanapun, tetap terbuka sampai closesocket dipanggil dengan deskriptor terakhir yang tersisa.
Pemberitahuan pada soket bersama tunduk pada batasan yang biasa dari fungsi WSAAsyncSelect dan WSAEventSelect. 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, tidak mungkin untuk memiliki proses A menerima FD_READ peristiwa dan proses B menerima peristiwa FD_WRITE. Untuk situasi ketika koordinasi yang ketat diperlukan, disarankan agar pengembang menggunakan utas alih-alih proses terpisah.