PFN_WSK_RECEIVE_FROM_EVENT fungsi panggilan balik (wsk.h)

Fungsi panggilan balik peristiwa WskReceiveFromEvent memberi tahu aplikasi WSK bahwa satu atau beberapa datagram telah diterima pada soket datagram.

Sintaks

PFN_WSK_RECEIVE_FROM_EVENT PfnWskReceiveFromEvent;

NTSTATUS PfnWskReceiveFromEvent(
  [in, optional] PVOID SocketContext,
  [in]           ULONG Flags,
  [in, optional] PWSK_DATAGRAM_INDICATION DataIndication
)
{...}

Parameter

[in, optional] SocketContext

Penunjuk ke konteks soket untuk soket datagram yang telah menerima datagram. Aplikasi WSK menyediakan penunjuk ini ke subsistem WSK ketika disebut fungsi WskSocket untuk membuat soket datagram.

[in] Flags

Nilai ULONG yang berisi bitwise OR dari kombinasi bendera berikut:

MSG_BCAST

Datagram diterima sebagai siaran lapisan tautan atau dengan alamat transportasi tujuan yang merupakan alamat siaran.

MSG_MCAST

Datagram diterima dengan alamat transportasi tujuan yang merupakan alamat multicast.

WSK_FLAG_AT_DISPATCH_LEVEL

Subsistem WSK yang disebut fungsi panggilan balik peristiwa WskReceiveFromEvent di IRQL = DISPATCH_LEVEL. Jika bendera ini tidak diatur, subsistem WSK mungkin telah memanggil fungsi panggilan balik peristiwa WskReceiveFromEvent di IRQL <= DISPATCH_LEVEL.

[in, optional] DataIndication

Penunjuk ke daftar tertaut struktur WSK_DATAGRAM_INDICATION yang menjelaskan datagram yang diterima. Jika parameter ini NULL, soket tidak lagi berfungsi dan aplikasi WSK harus memanggil fungsi WskCloseSocket untuk menutup soket sesegera mungkin.

Nilai kembali

Fungsi panggilan balik peristiwa WskReceiveFromEvent aplikasi WSK dapat mengembalikan salah satu kode NTSTATUS berikut:

Menampilkan kode Deskripsi
STATUS_SUCCESS
Aplikasi WSK menerima datagram dan mengambil semua datagram dari daftar tertaut WSK_DATAGRAM_INDICATION struktur. Subsistem WSK dapat memanggil fungsi panggilan balik peristiwa WskReceiveFromEvent lagi ketika datagram baru diterima di soket.
STATUS_PENDING
Aplikasi WSK menerima datagram tetapi tidak mengambil semua datagram dari daftar tertaut WSK_DATAGRAM_INDICATION struktur. Aplikasi WSK mempertahankan daftar tertaut struktur WSK_DATAGRAM_INDICATION hingga semua datagram diambil. Setelah aplikasi WSK mengambil semua datagram, aplikasi ini memanggil fungsi WskRelease untuk merilis daftar tertaut struktur WSK_DATAGRAM_INDICATION kembali ke subsistem WSK. Subsistem WSK dapat memanggil fungsi panggilan balik peristiwa WskReceiveFromEvent lagi ketika datagram baru diterima di soket.
STATUS_DATA_NOT_ACCEPTED
Aplikasi WSK tidak menerima datagram. Jika aplikasi WSK mengembalikan kode status ini, subsistem WSK akan merespons secara berbeda tergantung pada bagaimana aplikasi WSK mengaktifkan fungsi panggilan balik peristiwa WskReceiveFromEvent .
  • Jika aplikasi WSK mengaktifkan fungsi panggilan balik peristiwa WskReceiveFromEvent dengan menggunakan opsi soket SO_WSK_EVENT_CALLBACK , subsistem WSK akan memiliki buffer transportasi yang mendasari datagram jika memungkinkan atau jika diperlukan oleh protokol. Subsistem WSK akan menonaktifkan fungsi panggilan balik peristiwa WskReceiveFromEvent dan tidak akan memanggil fungsi panggilan balik peristiwa WskReceiveFromEvent lagi sampai setelah aplikasi WSK mengaktifkan kembali fungsi panggilan balik peristiwa ini dengan opsi soket SO_WSK_EVENT_CALLBACK. Setelah aplikasi WSK mengaktifkan kembali fungsi panggilan balik peristiwa WskReceiveFromEvent , subsistem WSK akan terus memanggil fungsi panggilan balik peristiwa WskReceiveFromEvent dengan datagram buffer yang tersisa dan kapan datagram baru diterima di soket.
  • Jika aplikasi WSK mengaktifkan fungsi panggilan balik peristiwa WskReceiveFromEvent dengan menggunakan WSK_SET_STATIC_EVENT_CALLBACKS operasi kontrol klien, subsistem WSK tidak akan menonaktifkan fungsi panggilan balik peristiwa WskReceiveFromEvent . Subsistem WSK akan terus memanggil fungsi panggilan balik peristiwa WskReceiveFromEvent ketika datagram baru diterima di soket.

Keterangan

Subsistem WSK memanggil fungsi panggilan balik peristiwa WSK aplikasi WSKReceiveFromEvent ketika datagram baru diterima pada soket datagram hanya jika fungsi panggilan balik peristiwa sebelumnya diaktifkan dengan opsi soket SO_WSK_EVENT_CALLBACK . Untuk informasi selengkapnya tentang mengaktifkan fungsi panggilan balik peristiwa soket, lihat Mengaktifkan dan Menonaktifkan Fungsi Panggilan Balik Peristiwa.

Jika fungsi panggilan balik peristiwa WskReceiveFromEvent aplikasi WSK diaktifkan pada soket datagram dan aplikasi juga memiliki panggilan tertunda ke fungsi WskReceiveFrom pada soket datagram yang sama, kemudian, ketika datagram tiba, panggilan tertunda ke fungsi WskReceiveFrom akan lebih diutamakan daripada fungsi panggilan balik peristiwa WskReceiveFromEvent . Subsistem WSK memanggil fungsi panggilan balik peristiwa WskReceiveFromEvent aplikasi hanya jika tidak ada IRP yang diantrekan dari panggilan yang tertunda ke fungsi WskReceiveFrom . Namun, aplikasi WSK tidak boleh berasumsi bahwa subsistem WSK tidak akan memanggil fungsi panggilan balik peristiwa WskReceiveFromEvent aplikasi untuk soket datagram yang memiliki panggilan tertunda ke fungsi WskReceiveFrom . Kondisi balapan ada di mana subsistem WSK masih dapat memanggil fungsi panggilan balik peristiwa WskReceiveFromEvent aplikasi WSK untuk soket. Satu-satunya cara bagi aplikasi WSK untuk memastikan bahwa subsistem WSK tidak akan memanggil fungsi panggilan balik peristiwa WskReceiveFromEvent aplikasi pada soket datagram adalah dengan menonaktifkan fungsi panggilan balik peristiwa WskReceiveFromEvent aplikasi pada soket.

Subsistem WSK memanggil fungsi panggilan balik peristiwa WSK aplikasi WSK WSK WskReceiveFromEvent di IRQL <= DISPATCH_LEVEL.

Fungsi panggilan balik peristiwa WskReceiveFromEvent aplikasi WSK tidak boleh menunggu penyelesaian permintaan WSK lainnya dalam konteks penyelesaian WSK atau fungsi panggilan balik peristiwa. Panggilan balik dapat memulai permintaan WSK lainnya (dengan asumsi bahwa panggilan balik tidak menghabiskan terlalu banyak waktu pada DISPATCH_LEVEL), tetapi tidak boleh menunggu penyelesaiannya bahkan ketika panggilan balik dipanggil di IRQL = PASSIVE_LEVEL.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows Vista dan versi yang lebih baru dari sistem operasi Windows.
Target Platform Windows
Header wsk.h (termasuk Wsk.h)
IRQL <= DISPATCH_LEVEL

Lihat juga

WSK_CLIENT_DATAGRAM_DISPATCH

WSK_DATAGRAM_INDICATION

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskRelease

WskSendTo

WskSocket