Bagikan melalui


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
WSAEINVAL
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.

**Catatan** Fungsi ini berbeda dari fungsi lain dengan awalan "WPU" karena tidak diakses melalui tabel penarikan. Sebaliknya, ini diekspor langsung oleh Ws2_32.dll. Penyedia layanan yang perlu memanggil fungsi ini harus ditautkan dengan WS2_32.lib atau menggunakan fungsi sistem operasi yang sesuai seperti LoadLibrary dan GetProcAddress untuk mengambil penunjuk fungsi.
 
Fungsi **WPUCompleteOverlappedRequest** digunakan oleh penyedia layanan yang tidak menerapkan fungsionalitas Installable File System (IFS) secara langsung untuk penanganan soket yang mereka ekspos. Ini melakukan pemberitahuan penyelesaian untuk permintaan I/O yang tumpang tindih di mana pemberitahuan penyelesaian yang ditentukan selain APC mode pengguna. **WPUCompleteOverlappedRequest** hanya didukung untuk handel soket yang dibuat oleh WPUCreateSocketHandle dan bukan untuk soket yang dibuat oleh penyedia layanan secara langsung.

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

Lihat juga

WPUCreateSocketHandle

WPUQueueApc

WSAOVERLAPPED

WSPGetOverlappedResult