Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengaitkan sekumpulan soket dengan port penyelesaian, dan mengambil pemberitahuan apa pun yang sudah tertunda pada port tersebut. Setelah dikaitkan, port penyelesaian menerima pemberitahuan status soket yang ditentukan. Hanya soket penyedia Microsoft Winsock yang didukung.
Untuk mengurangi overhead panggilan sistem, Anda dapat mendaftar untuk pemberitahuan dan mengambilnya dalam satu panggilan ke ProcessSocketNotifications. Atau, Anda dapat mengambilnya secara eksplisit dengan memanggil fungsi port penyelesaian I/O biasa, seperti GetQueuedCompletionStatus. Pemberitahuan yang diambil menggunakan ProcessSocketNotifications sama dengan yang diambil menggunakan GetQueuedCompletionStatusEx, yang mungkin menyertakan paket pemberitahuan selain perubahan status soket.
Bendera peristiwa pemberitahuan adalah nilai bilangan bulat dari bidang dwNumberOfBytesTransferred dari struktur OVERLAPPED_ENTRY yang dikembalikan. Ini mirip dengan menggunakan JOBOBJECT_ASSOCIATE_COMPLETION_PORT, yang juga menggunakan bidang dwNumberOfBytesTransferred untuk mengirim pesan bilangan bulat. Panggil fungsi SocketNotificationRetrieveEvents untuk mendapatkannya.
Handel soket hanya dapat didaftarkan ke satu IOCP pada satu waktu. Mendaftarkan ulang handel soket yang didaftarkan sebelumnya menimpa pendaftaran yang ada. Sebelum menutup handel yang digunakan untuk pendaftaran, Anda harus secara eksplisit menghapus pendaftaran, dan menunggu pemberitahuan SOCK_NOTIFY_EVENT_REMOVE (lihat Komentar dalam topik ini).
Untuk informasi selengkapnya, dan contoh kode, lihat Pemberitahuan status soket Winsock.
Sintaks
DWORD WSAAPI ProcessSocketNotifications(
HANDLE completionPort,
UINT32 registrationCount,
SOCK_NOTIFY_REGISTRATION *registrationInfos,
UINT32 timeoutMs,
ULONG completionCount,
OVERLAPPED_ENTRY *completionPortEntries,
UINT32 *receivedEntryCount
);
Parameter
completionPort
Ketik: _In_ HANDLE
Handel ke port penyelesaian I/O yang dibuat menggunakan fungsi CreateIoCompletionPort . Port akan digunakan dalam parameter CompletionPort dari fungsi PostQueuedCompletionStatus saat pesan dikirim atas nama soket.
registrationCount
Ketik: _In_ UINT32
Jumlah pendaftaran yang disediakan oleh registrationInfos.
registrationInfos
Jenis: SOCK_NOTIFY_REGISTRATION _Inout_updates_opt_(registrationCount) *
Penunjuk ke array struktur SOCK_NOTIFY_REGISTRATION yang menentukan parameter pendaftaran pemberitahuan. Ini termasuk soket yang menarik, peristiwa pemberitahuan yang menarik, dan bendera operasi. Jika berhasil, Anda harus memeriksa elemen apakah pendaftaran berhasil diproses. Argumen ini harus NULL jika registrationCount adalah 0.
timeoutMs
Ketik: _In_ UINT32
Waktu dalam milidetik bahwa Anda bersedia menunggu paket penyelesaian muncul di port penyelesaian. Jika paket penyelesaian tidak muncul dalam waktu yang ditentukan, maka waktu fungsi habis dan mengembalikan ERROR_TIMEOUT.
Jika timeoutM adalahINFINITE (0xFFFFFFFF), maka fungsi tidak akan pernah kehabisan waktu. Jika timeoutM adalah 0, dan tidak ada operasi I/O untuk menghapus antrean, maka fungsi akan segera kehabisan waktu.
Nilai timeoutM harus 0 jika completionCount adalah 0.
completionCount
Ketik: _In_ ULONG
Jumlah maksimum struktur OVERLAPPED_ENTRY untuk dihapus. Jika 0 ditentukan, maka hanya operasi pendaftaran yang akan diproses.
completionPortEntries
Jenis: _Out_writes_to_opt_(completionCount, *receivedEntryCount) OVERLAPPED_ENTRY*
Pada input, menunjuk ke array struktur OVERLAPPED_ENTRY yang telah dialokasikan sebelumnya. Array tidak boleh tumpang tindih dengan array registrationInfos . Nilai completionPortEntries harus NULL jika completionCount adalah 0.
Pada output, menerima array struktur OVERLAPPED_ENTRY yang menyimpan entri. Jumlah elemen array disediakan oleh ReceivedEntryCount. Bidang dwNumberOfBytesTransferred dari struktur adalah masker bilangan bulat dari peristiwa yang diterima. Bidang lpOverlapped dicadangkan dan tidak boleh digunakan sebagai pointer.
receivedEntryCount
Jenis: _Out_opt_ UINT32*
Penunjuk ke variabel yang menerima jumlah entri yang dihapus. Harus NULL jika completionCount adalah 0.
Mengembalikan nilai
Jika berhasil, mengembalikan ERROR_SUCCESS. Jika fungsi berhasil dan Anda menyediakan completionCount non-0, tetapi tidak ada paket penyelesaian yang muncul dalam waktu yang ditentukan, mengembalikan WAIT_TIMEOUT. Jika tidak, mengembalikan kode kesalahan WSAE* yang sesuai.
Jika ERROR_SUCCESS atau WAIT_TIMEOUT dikembalikan, maka Anda harus memeriksa hasil pendaftaran info pendaftaran individual. Jika tidak, seluruh operasi gagal, dan tidak ada perubahan yang terjadi.
Keterangan
Lihat SocketNotificationRetrieveEvents untuk peristiwa yang dimungkinkan saat pemberitahuan diterima.
Persyaratan
| Klien minimum yang didukung | Windows 10 Build 20348 |
| Server minimum yang didukung | Windows 10 Build 20348 |
| Header | winsock2.h |
| Pustaka | Ws2_32.lib |
| DLL | Ws2_32.dll |