Fungsi WSAGetOverlappedResult (winsock2.h)
Fungsi WSAGetOverlappedResult mengambil hasil operasi yang tumpang tindih pada soket yang ditentukan.
Sintaks
BOOL WSAAPI WSAGetOverlappedResult(
[in] SOCKET s,
[in] LPWSAOVERLAPPED lpOverlapped,
[out] LPDWORD lpcbTransfer,
[in] BOOL fWait,
[out] LPDWORD lpdwFlags
);
Parameter
[in] s
Deskriptor yang mengidentifikasi soket.
Ini adalah soket yang sama yang ditentukan ketika operasi yang tumpang tindih dimulai oleh panggilan ke salah satu fungsi Winsock yang mendukung operasi yang tumpang tindih. Fungsi-fungsi ini termasuk AcceptEx, ConnectEx, DisconnectEx, TransmitFile, TransmitPackets, WSARecv, WSARecvFrom, LPFN_WSARECVMSG (WSARecvMsg), WSASend, WSASendMsg, WSASendTo, dan WSAIoctl.
[in] lpOverlapped
Penunjuk ke struktur WSAOVERLAPPED yang ditentukan ketika operasi yang tumpang tindih dimulai. Parameter ini tidak boleh berupa penunjuk NULL .
[out] lpcbTransfer
Pointer ke variabel 32-bit yang menerima jumlah byte yang benar-benar ditransfer oleh operasi kirim atau terima, atau oleh fungsi WSAIoctl . Parameter ini tidak boleh berupa penunjuk NULL .
[in] fWait
Bendera yang menentukan apakah fungsi harus menunggu operasi tumpang tindih yang tertunda selesai. Jika TRUE, fungsi tidak mengembalikan sampai operasi selesai. Jika FALSE dan operasi masih tertunda, fungsi mengembalikan FALSE dan fungsi WSAGetLastError mengembalikan WSA_IO_INCOMPLETE. Parameter fWait dapat diatur ke TRUE hanya jika operasi yang tumpang tindih memilih pemberitahuan penyelesaian berbasis peristiwa.
[out] lpdwFlags
Penunjuk ke variabel 32-bit yang akan menerima satu atau beberapa bendera yang melengkapi status penyelesaian. Jika operasi yang tumpang tindih dimulai melalui WSARecv atau WSARecvFrom, parameter ini akan berisi nilai hasil untuk parameter lpFlags . Parameter ini tidak boleh berupa penunjuk NULL .
Nilai kembali
Jika WSAGetOverlappedResult berhasil, nilai yang dikembalikan adalah TRUE. Ini berarti bahwa operasi yang tumpang tindih telah berhasil diselesaikan dan bahwa nilai yang ditunjukkan oleh lpcbTransfer telah diperbarui.
Jika WSAGetOverlappedResult mengembalikan FALSE, ini berarti bahwa operasi yang tumpang tindih belum selesai, operasi yang tumpang tindih selesai tetapi dengan kesalahan, atau status penyelesaian operasi yang tumpang tindih tidak dapat ditentukan karena kesalahan dalam satu atau beberapa parameter ke WSAGetOverlappedResult. Jika gagal, nilai yang ditunjukkan oleh lpcbTransfer tidak akan diperbarui. Gunakan WSAGetLastError untuk menentukan penyebab kegagalan (baik oleh fungsi WSAGetOverlappedResult atau oleh operasi tumpang tindih terkait).
Kode kesalahan | Makna |
---|---|
Panggilan WSAStartup yang berhasil harus terjadi sebelum menggunakan fungsi ini. | |
Subsistem jaringan gagal. | |
Deskriptor bukan soket. | |
Parameter hEvent dari struktur WSAOVERLAPPED tidak berisi handel objek peristiwa yang valid. | |
Salah satu parameter tidak dapat diterima. | |
Parameter fWait adalah FALSE dan operasi I/O belum selesai. | |
Satu atau beberapa parameter lpOverlapped, lpcbTransfer, atau lpdwFlags tidak berada di bagian ruang alamat pengguna yang valid. Kesalahan ini dikembalikan jika parameter lpOverlapped, lpcbTransfer, atau lpdwFlags adalah pointer NULL pada Windows Server 2003 dan yang lebih lama. |
Keterangan
Fungsi WSAGetOverlappedResult melaporkan hasil operasi tumpang tindih yang ditentukan dalam parameter lpOverlapped untuk soket yang ditentukan dalam parameter s . Fungsi WSAGetOverlappedResult melewati deskriptor soket dan struktur WSAOVERLAPPED yang ditentukan ketika fungsi tumpang tindih dipanggil. Operasi yang tertunda ditunjukkan ketika fungsi yang memulai operasi mengembalikan FALSE dan fungsi WSAGetLastError mengembalikan WSA_IO_PENDING. Ketika operasi I/O seperti WSARecv tertunda, fungsi yang memulai operasi mereset anggota hEvent dari struktur WSAOVERLAPPED ke status tidak ditandatangani. Kemudian, ketika operasi yang tertunda telah selesai, sistem mengatur objek peristiwa ke status yang disinyalkan.
Jika parameter fWaitTRUE, WSAGetOverlappedResult menentukan apakah operasi yang tertunda telah selesai dengan menunggu objek peristiwa berada dalam status disinyalkan. Klien dapat mengatur parameter fWait ke TRUE, tetapi hanya jika memilih pemberitahuan penyelesaian berbasis peristiwa saat operasi I/O diminta. Jika bentuk pemberitahuan lain dipilih, penggunaan parameter hEvent struktur WSAOVERLAPPED berbeda, dan pengaturan fWait ke TRUE menyebabkan hasil yang tidak dapat diprediksi.
Jika fungsi WSAGetOverlappedResult dipanggil dengan parameter lpOverlapped, lpcbTransfer, atau lpdwFlags yang diatur ke pointer NULL di Windows Vista, ini akan mengakibatkan pelanggaran akses. Jika fungsi WSAGetOverlappedResult dipanggil dengan parameter lpOverlapped, lpcbTransfer, atau lpdwFlags yang diatur ke pointer NULL pada Windows Server 2003 dan yang lebih lama, ini akan mengakibatkan kode kesalahan WSAEFAULT dikembalikan.
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 |
---|---|
Klien minimum yang didukung | Windows 8.1, Windows Vista [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | winsock2.h |
Pustaka | Ws2_32.lib |
DLL | Ws2_32.dll |