Bagikan melalui


Alokasi Deskriptor

Sementara penyedia layanan Windows Sockets didorong untuk mengimplementasikan soket sebagai objek sistem file (IFS) yang dapat diinstal, arsitektur Winsock juga mengakomodasi penyedia layanan yang handel soketnya bukan objek IFS. Penyedia dengan handel IFS menunjukkan hal ini melalui bit atribut XP1_IFS_HANDLES dalam struktur WSAPROTOCOL_INFO . (Catatan: bit atribut XP1_IFS_HANDLES tidak disertakan dalam rilis 2.0.8 spesifikasi API, tetapi sejak itu telah ditambahkan melalui mekanisme errata.) Klien Winsock SPI dapat memanfaatkan penyedia yang deskriptor soketnya menangani IFS dengan menggunakan deskriptor ini dengan fasilitas I/O Windows standar, seperti ReadFile dan WriteFile.

Setiap kali penyedia IFS membuat deskriptor soket baru, penyedia harus memanggil WPUModifyIFSHandle sebelum memasok handel baru ke klien Windows Sockets SPI. Fungsi ini mengambil pengidentifikasi penyedia dan handel IFS yang diusulkan dari penyedia sebagai input dan mengembalikan handel yang dimodifikasi (mungkin). Penyedia IFS hanya boleh menyediakan handel yang dimodifikasi ke kliennya, dan semua permintaan dari klien hanya akan mereferensikan handel yang dimodifikasi ini. Handel yang dimodifikasi dijamin tidak dapat dibedakan dari handel yang diusulkan sejauh sistem operasi yang bersangkutan. Dengan demikian dalam kebanyakan kasus, penyedia layanan hanya akan memilih untuk hanya menggunakan handel yang dimodifikasi di semua pemrosesan internalnya. Tujuan dari fungsi modifikasi ini adalah untuk memungkinkan Ws2_32.dll sangat menyederhanakan proses mengidentifikasi penyedia layanan yang terkait dengan soket tertentu.

Penyedia yang tidak mengembalikan handel IFS harus mendapatkan handel yang valid dari Ws2_32.dll melalui panggilan WPUCreateSocketHandle . Penyedia nonIFS hanya boleh menawarkan handel Windows Sockets 2.DLL disediakan kepada kliennya, dan semua permintaan dari klien hanya akan mereferensikan handel ini. Sebagai kemudahan bagi pelaksana penyedia layanan, salah satu parameter input yang disediakan oleh penyedia di WPUCreateSocketHandle adalah nilai konteks DWORD. Ws2_32.dll mengaitkan nilai konteks ini dengan handel soket yang dialokasikan dan memungkinkan penyedia layanan untuk mengambil nilai konteks kapan saja melalui panggilan WPUQuerySocketHandleContext . Penggunaan umum untuk nilai konteks ini adalah menyimpan penunjuk ke struktur data yang dikelola penyedia layanan yang digunakan untuk menyimpan informasi status soket.