Fungsi ProcessSocketNotifications (winsock2.h)

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

Lihat juga