Bagikan melalui


LPFN_RIOCREATEREQUESTQUEUE fungsi panggilan balik (mswsock.h)

Fungsi RIOCreateRequestQueue membuat deskriptor soket I/O terdaftar menggunakan soket tertentu dan antrean penyelesaian I/O untuk digunakan dengan ekstensi I/O terdaftar Winsock.

Sintaks

LPFN_RIOCREATEREQUESTQUEUE LpfnRiocreaterequestqueue;

RIO_RQ LpfnRiocreaterequestqueue(
  SOCKET Socket,
  ULONG MaxOutstandingReceive,
  ULONG MaxReceiveDataBuffers,
  ULONG MaxOutstandingSend,
  ULONG MaxSendDataBuffers,
  RIO_CQ ReceiveCQ,
  RIO_CQ SendCQ,
  PVOID SocketContext
)
{...}

Parameter

Socket

Deskriptor yang mengidentifikasi soket.

MaxOutstandingReceive

Jumlah maksimum penerimaan terutang yang diizinkan pada soket.

Parameter ini biasanya merupakan angka kecil untuk sebagian besar aplikasi.

MaxReceiveDataBuffers

Jumlah maksimum menerima buffer data pada soket.

Catatan

Untuk Windows 8 dan Windows Server 2012, parameter ini harus 1.

MaxOutstandingSend

Jumlah maksimum pengiriman terutang yang diizinkan pada soket.

MaxSendDataBuffers

Jumlah maksimum buffer kirim data pada soket.

Catatan

Untuk Windows 8 dan Windows Server 2012, parameter ini harus 1.

ReceiveCQ

Deskriptor yang mengidentifikasi antrean penyelesaian I/O yang akan digunakan untuk menerima penyelesaian permintaan.

SendCQ

Deskriptor yang mengidentifikasi antrean penyelesaian I/O yang akan digunakan untuk mengirim penyelesaian permintaan.

Parameter ini mungkin memiliki nilai yang sama dengan parameter ReceiveCQ .

SocketContext

Konteks soket untuk dikaitkan dengan antrean permintaan ini.

Mengembalikan nilai

Jika tidak ada kesalahan yang terjadi, fungsi RIOCreateRequestQueue mengembalikan deskriptor yang mereferensikan antrean permintaan baru. Jika tidak, nilai RIO_INVALID_RQ dikembalikan, dan kode kesalahan tertentu dapat diambil dengan memanggil fungsi WSAGetLastError .

Menampilkan kode Deskripsi
WSAEINVAL
Parameter yang tidak valid diteruskan ke fungsi.
Kesalahan ini dikembalikan jika parameter ReceiveCQ atau SendCQ berisi RIO_INVALID_CQ. Kesalahan ini dikembalikan jika parameter MaxOutstandingReceive dan MaxOutstandingSend adalah nol. Kesalahan ini juga dikembalikan jika soket yang diteruskan dalam parameter Soket sedang dalam proses inisialisasi atau penutupan.
WSAENOBUFS
Memori yang cukup tidak dapat dialokasikan. Kesalahan ini dikembalikan jika memori tidak cukup untuk mengalokasikan antrean permintaan berdasarkan parameter. Kesalahan ini juga dikembalikan jika batas sesi jaringan terlampaui.
WSAENOTSOCK
Deskriptor bukan soket. Kesalahan ini dikembalikan jika parameter Soket bukan soket yang valid.
WSAEOPNOTSUPP
Operasi yang dicoba tidak didukung untuk jenis objek yang direferensikan. Kesalahan ini dikembalikan untuk soket dalam parameter Soket untuk jenis soket yang tidak didukung (SOCK_RAW, misalnya)

Keterangan

Fungsi RIOCreateRequestQueue membuat deskriptor soket I/O terdaftar menggunakan soket tertentu dan antrean penyelesaian I/O. Aplikasi harus memanggil RIOCreateRequestQueue untuk mendapatkan RIO_RQ untuk soket Winsock sebelum aplikasi dapat menggunakan fungsi RIOSend, RIOSendEx, RIOReceive, atau RIOReceiveEx . Untuk mendapatkan RIO_RQ, soket Winsock harus dikaitkan dengan antrean penyelesaian untuk dikirim dan diterima, meskipun antrean penyelesaian yang sama dapat digunakan untuk keduanya.

Karena ukuran antrean penyelesaian yang terbatas, soket hanya dapat dikaitkan dengan antrean penyelesaian untuk operasi kirim dan terima jika menjamin untuk tidak melebihi kapasitas untuk total penyelesaian antrean. Oleh karena itu, batas khusus soket ditetapkan oleh panggilan ke fungsi RIOCreateRequestQueue . Batas ini digunakan baik selama panggilan RIOCreateRequestQueue untuk memverifikasi ruang yang cukup dalam antrean penyelesaian untuk mengakomodasi permintaan soket dan selama waktu inisiasi permintaan untuk memastikan bahwa permintaan tidak menyebabkan soket melebihi batasnya.

Antrean kirim dan terima dapat dikaitkan dengan beberapa soket. Ukuran antrean kirim dan terima harus lebih besar dari atau sama dengan ukuran kirim dan terima semua soket yang terpasang. Karena antrean permintaan ditutup dengan menutup soket menggunakan fungsi closesocket , slot tersebut akan dibebaskan untuk digunakan oleh soket lain.

Catatan

Untuk tujuan efisiensi, akses ke antrean penyelesaian (struct RIO_CQ ) dan antrean permintaan (RIO_RQ structs) tidak dilindungi oleh primitif sinkronisasi. Jika Anda perlu mengakses penyelesaian atau meminta antrean dari beberapa utas, akses harus dikoordinasikan oleh bagian penting, kunci tulis pembaca ramping atau mekanisme serupa. Penguncian ini tidak diperlukan untuk akses oleh satu utas. Utas yang berbeda dapat mengakses permintaan/antrean penyelesaian terpisah tanpa kunci. Kebutuhan untuk sinkronisasi hanya terjadi ketika beberapa utas mencoba mengakses antrean yang sama. Sinkronisasi juga diperlukan jika beberapa masalah utas mengirim dan menerima pada soket yang sama karena operasi kirim dan terima menggunakan antrean permintaan soket.

 

Ketika aplikasi selesai menggunakan RIO_RQ, aplikasi harus memanggil fungsi closesocket untuk menutup soket dan membebaskan sumber daya terkait.

Catatan

Penunjuk fungsi ke fungsi RIOCreateRequestQueue harus diperoleh pada durasi dengan melakukan panggilan ke fungsi WSAIoctl dengan opcode SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER yang ditentukan. Buffer input yang diteruskan ke fungsi WSAIoctl harus berisi WSAID_MULTIPLE_RIO, pengidentifikasi unik global (GUID) yang nilainya mengidentifikasi fungsi ekstensi I/O terdaftar Winsock. Setelah berhasil, output yang dikembalikan oleh fungsi WSAIoctl berisi pointer ke struktur RIO_EXTENSION_FUNCTION_TABLE yang berisi pointer ke fungsi ekstensi I/O terdaftar Winsock. IOCTL SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER didefinisikan dalam file header Ws2def.h. GUID WSAID_MULTIPLE_RIO didefinisikan dalam file header Mswsock.h .

 

Windows Phone 8: Fungsi ini didukung untuk aplikasi Windows Phone Store di Windows Phone 8 dan yang lebih baru.

Windows 8.1 dan Windows Server 2012 R2: Fungsi ini didukung untuk aplikasi Windows Store di Windows 8.1, Windows Server 2012 R2, dan yang lebih baru.

Persyaratan

Persyaratan Nilai
Header mswsock.h