Fungsi WPUCompleteOverlappedRequest (ws2spi.h)
Fungsi WPUCompleteOverlappedRequest melakukan pemberitahuan penyelesaian I/O yang tumpang tindih untuk operasi I/O yang tumpang tindih.
Sintaks
int WPUCompleteOverlappedRequest(
[in] SOCKET s,
[in] LPWSAOVERLAPPED lpOverlapped,
[in] DWORD dwError,
[in] DWORD cbTransferred,
[out] LPINT lpErrno
);
Parameter
[in] s
Soket penyedia layanan yang dibuat oleh WPUCreateSocketHandle.
[in] lpOverlapped
Penunjuk ke struktur WSAOVERLAPPED yang terkait dengan operasi I/O yang tumpang tindih yang penyelesaiannya akan diberi tahu.
[in] dwError
Status penyelesaian operasi I/O yang tumpang tindih yang penyelesaiannya akan diberi tahu.
[in] cbTransferred
Jumlah byte yang ditransfer ke atau dari buffer klien (arah transfer tergantung pada sifat pengiriman atau penerimaan operasi I/O yang tumpang tindih yang penyelesaiannya akan diberi tahu).
[out] lpErrno
Penunjuk ke kode kesalahan yang dihasilkan dari eksekusi fungsi ini.
Mengembalikan nilai
Jika tidak ada kesalahan yang terjadi, WPUCompleteOverlappedRequest mengembalikan nol dan memberi tahu penyelesaian operasi I/O yang tumpang tindih sesuai dengan mekanisme yang dipilih oleh klien (memberi sinyal peristiwa yang ditemukan dalam struktur WSAOVERLAPPED yang direferensikan oleh lpOverlapped dan/atau mengantre laporan status penyelesaian ke port penyelesaian yang terkait dengan soket jika port penyelesaian dikaitkan). Jika tidak, WPUCompleteOverlappedRequest mengembalikan SOCKET_ERROR, dan kode kesalahan tertentu tersedia di lpErrno.
Kode kesalahan | Makna |
---|---|
Soket yang diteruskan dalam parameter s bukan soket yang dibuat oleh WPUCreateSocketHandle. |
Keterangan
Fungsi WPUCompleteOverlappedRequest melakukan pemberitahuan penyelesaian I/O yang tumpang tindih untuk operasi I/O yang tumpang tindih di mana mekanisme penyelesaian yang ditentukan klien adalah sesuatu selain panggilan prosedur mode-asinkron pengguna (APC). Fungsi ini hanya dapat digunakan untuk handel soket yang dibuat oleh WPUCreateSocketHandle.
Jika klien memilih APC mode pengguna sebagai metode pemberitahuan, penyedia layanan harus menggunakan WPUQueueApc atau fungsi sistem operasi lain yang sesuai untuk melakukan pemberitahuan penyelesaian. Jika APC mode pengguna tidak dipilih oleh klien, penyedia layanan yang tidak menerapkan fungsionalitas IFS secara langsung tidak dapat menentukan apakah klien telah mengaitkan port penyelesaian dengan handel soket atau tidak. Dengan demikian, itu tidak dapat menentukan apakah metode pemberitahuan penyelesaian harus mengantre rekaman status penyelesaian ke port penyelesaian atau memberi sinyal peristiwa yang ditemukan dalam struktur WSAOVERLAPPED . Arsitektur Windows Socket 2 melacak asosiasi port penyelesaian apa pun dengan soket yang dibuat oleh WPUCreateSocketHandle dan dapat membuat keputusan yang benar antara penyelesaian pemberitahuan berbasis port atau pemberitahuan berbasis peristiwa.
Ketika WPUCompleteOverlappedRequest mengantre indikasi penyelesaian, WPUCompleteOverlapped mengatur anggota Internal struktur WSAOVERLAPPED ke jumlah byte yang ditransfer. Kemudian, ini menetapkan anggota Internal ke beberapa nilai yang bergantung pada OS selain nilai khusus WSS_OPERATION_IN_PROGRESS. Mungkin ada sedikit penundaan setelah WPUCompleteOverlappedRequest kembali sebelum nilai ini muncul, karena pemrosesan mungkin terjadi secara asinkron. Namun, nilai InternalHigh (jumlah byte) dijamin akan ditetapkan pada saat Internal ditetapkan.
WPUCompleteOverlappedRequest berfungsi seperti yang dinyatakan (melakukan pemberitahuan penyelesaian seperti yang diminta oleh klien) apakah handel soket telah dikaitkan dengan port penyelesaian atau tidak.
Interaksi dengan WSPGetOverlappedResult
Perilaku WPUCompleteOverlappedRequest menempatkan beberapa batasan tentang bagaimana penyedia layanan mengimplementasikan WSPGetOverlappedResult karena hanya anggota Offset dan OffsetHigh dari struktur WSAOVERLAPPED yang secara eksklusif dikendalikan oleh penyedia layanan, namun tiga nilai (jumlah byte, bendera, dan kesalahan) harus diambil dari struktur oleh WSPGetOverlappedResult. Penyedia layanan dapat menyelesaikan ini dengan cara apa pun yang dipilihnya selama berinteraksi dengan perilaku WPUCompleteOverlappedRequest dengan benar. Namun, implementasi umumnya adalah sebagai berikut:
- Pada awal pemrosesan yang tumpang tindih, penyedia layanan mengatur Internal ke WSS_OPERATION_IN_PROGRESS.
- Ketika operasi I/O telah selesai, penyedia mengatur OffsetHigh ke kode kesalahan Windows Socket 2 yang dihasilkan dari operasi, mengatur Offset ke bendera yang dihasilkan dari operasi I/O, dan memanggil WPUCompleteOverlappedRequest, meneruskan jumlah byte transfer sebagai salah satu parameter. WPUCompleteOverlappedRequest akhirnya mengatur InternalHigh ke jumlah byte transfer, lalu mengatur Internal ke nilai selain WSS_OPERATION_IN_PROGRESS.
- Ketika WSPGetOverlappedResult dipanggil, penyedia layanan memeriksa Internal. Jika WSS_OPERATION_IN_PROGRESS, penyedia menunggu handel peristiwa di anggota hEvent atau mengembalikan kesalahan, berdasarkan pengaturan bendera FWAIT WSPGetOverlappedResult. Jika tidak sedang berlangsung, atau setelah selesai menunggu, penyedia mengembalikan nilai dari InternalHigh, OffsetHigh, dan Offset sebagai jumlah transfer, kode kesalahan hasil operasi, dan bendera masing-masing.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
Target Platform | Windows |
Header | ws2spi.h |