Fungsi WSAPoll (winsock2.h)
Fungsi WSAPoll menentukan status satu atau beberapa soket.
Sintaks
int WSAAPI WSAPoll(
[in, out] LPWSAPOLLFD fdArray,
[in] ULONG fds,
[in] INT timeout
);
Parameter
[in, out] fdArray
Array dari satu atau beberapa struktur POLLFD yang menentukan set soket yang statusnya diminta. Array harus berisi setidaknya satu struktur dengan soket yang valid. Setelah dikembalikan, parameter ini menerima soket yang diperbarui dengan anggota revents status flags yang diatur pada masing-masing yang cocok dengan kriteria kueri status.
[in] fds
Jumlah struktur WSAPOLLFD dalam fdarray. Ini belum tentu jumlah soket yang statusnya diminta.
[in] timeout
Nilai yang menentukan perilaku tunggu, berdasarkan nilai berikut.
Nilai | Makna |
---|---|
Lebih besar dari nol | Waktu, dalam milidetik, untuk menunggu. |
Nol | Segera kembali. |
Kurang dari nol | Tunggu tanpa batas waktu. |
Mengembalikan nilai
Mengembalikan salah satu nilai berikut.
Mengembalikan nilai | Deskripsi |
---|---|
Nol | Tidak ada soket yang berada dalam status dikueri sebelum timer kedaluwarsa. |
Lebih besar dari nol | Jumlah elemen dalam fdarray di mana anggota revents struktur POLLFD bukan nol. |
SOCKET_ERROR | Terjadi kesalahan. Panggil fungsi WSAGetLastError untuk mengambil kode kesalahan yang diperluas. |
Kode Kesalahan yang Diperluas | Makna |
---|---|
Subsistem jaringan gagal. | |
Terjadi pengecualian saat membaca parameter input pengguna. | |
Parameter yang tidak valid diteruskan. Kesalahan ini dikembalikan jika struktur WSAPOLLFD diacu oleh parameter fdarray saat meminta status soket. Kesalahan ini juga dikembalikan jika tidak ada soket yang ditentukan dalam anggota fd dari salah satu struktur WSAPOLLFD yang ditujukkan oleh parameter fdarray yang valid. | |
Fungsi tidak dapat mengalokasikan memori yang cukup. |
Keterangan
Fungsi WSAPoll didefinisikan pada Windows Vista dan yang lebih baru.
Struktur WSAPOLLFD . Aplikasi menetapkan bendera yang sesuai dalam peristiwa anggota struktur WSAPOLLFD untuk menentukan jenis status yang diminta untuk setiap soket yang sesuai. Fungsi WSAPoll mengembalikan status soket dalam anggota revents struktur WSAPOLLFD .
Untuk setiap soket, penelepon dapat meminta informasi tentang status baca atau tulis. Kondisi kesalahan selalu dikembalikan, sehingga informasi tentangnya tidak perlu diminta.
Struktur WSAPOLLFD ditujukkan oleh parameter fdarray . Semua soket yang tidak memenuhi kriteria ini dan tidak memiliki kondisi kesalahan akan memiliki anggota revents yang sesuai yang diatur ke 0.
Kombinasi bendera berikut dapat diatur dalam struktur WSAPOLLFD untuk soket tertentu saat meminta status untuk soket tersebut:
Bendera | Deskripsi |
---|---|
POLLPRI | Data prioritas dapat dibaca tanpa memblokir. Bendera ini tidak didukung oleh penyedia Microsoft Winsock. |
POLLRDBAND | Data pita prioritas (di luar band) dapat dibaca tanpa memblokir. |
POLLRDNORM | Data normal dapat dibaca tanpa memblokir. |
POLLWRNORM | Data normal dapat ditulis tanpa memblokir. |
Bendera POLLIN didefinisikan sebagai kombinasi dari nilai bendera POLLRDNORM dan POLLRDBAND . Bendera POLLOUT didefinisikan sama dengan nilai bendera POLLWRNORM .
Struktur WSAPOLLFD hanya boleh berisi kombinasi bendera di atas yang didukung oleh penyedia Winsock. Nilai lain dianggap sebagai kesalahan dan WSAPoll akan mengembalikan SOCKET_ERROR. Panggilan berikutnya ke fungsi WSAGetLastError akan mengambil kode kesalahan WSAEINVAL yang diperluas. Jika bendera POLLPRI diatur pada soket untuk penyedia Microsoft Winsock, fungsi WSAPoll akan gagal.
Ketika struktur WSAPOLLFD ditunjukkan oleh parameter fdarray untuk menunjukkan status soket:
Bendera | Deskripsi |
---|---|
POLLERR | Terjadi kesalahan. |
POLLHUP | Koneksi berorientasi aliran terputus atau dibatalkan. |
POLLNVAL | Soket yang tidak valid digunakan. |
POLLPRI | Data prioritas dapat dibaca tanpa memblokir. Bendera ini tidak dikembalikan oleh penyedia Microsoft Winsock. |
POLLRDBAND | Data pita prioritas (di luar band) dapat dibaca tanpa memblokir. |
POLLRDNORM | Data normal dapat dibaca tanpa memblokir. |
POLLWRNORM | Data normal dapat ditulis tanpa memblokir. |
Sehubungan dengan soket TCP dan UDP:
- Struktur WSAPOLLFD sebagai data normal sebagai POLLRDNORM.
- Struktur WSAPOLLFD , operasi recv berikutnya dijamin selesai tanpa memblokir.
- Struktur WSAPOLLFD oleh POLLWRNORM.
- Struktur WSAPOLLFD oleh POLLRDNORM. Panggilan berikutnya untuk diterima dijamin selesai tanpa memblokir.
- Struktur WSAPOLLFD oleh POLLRDBAND.
- Struktur WSAPOLLFD ketika peer jarak jauh mematikan operasi pengiriman (FIN TCP diterima). Permintaan fungsi recv berikutnya akan mengembalikan nol byte.
- Struktur WSAPOLLFD ketika peer jarak jauh memulai pemutusan sambungan dengan anggun.
- Struktur WSAPOLLFD ditampilkan ketika serekan jarak jauh tiba-tiba terputus.
- Struktur WSAPOLLFD ketika soket lokal ditutup.
Jumlah elemen (bukan soket) dalam fdarray ditunjukkan oleh nfds. Anggota fdarray yang anggota fd-nya diatur ke nilai negatif diabaikan dan reventi mereka akan diatur ke POLLNVAL saat kembali. Perilaku ini berguna untuk aplikasi yang mempertahankan alokasi fdarray tetap dan tidak akan memampatkan array untuk menghapus entri yang tidak digunakan atau untuk merealokasi memori. Tidak perlu menghapus reventarsi untuk elemen apa pun sebelum memanggil WSAPoll.
Argumen batas waktu menentukan berapa lama fungsi menunggu sebelum kembali. Nilai positif berisi jumlah milidetik yang akan ditunggu sebelum kembali. Nilai nol memaksa WSAPoll untuk segera kembali, dan nilai negatif menunjukkan bahwa WSAPoll harus menunggu tanpa batas waktu.
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 2008 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | winsock2.h (termasuk Winsock2.h) |
Pustaka | Ws2_32.lib |
DLL | Ws2_32.dll |