Bagikan melalui


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
WSAENETDOWN
Subsistem jaringan gagal.
WSAEFAULT
Terjadi pengecualian saat membaca parameter input pengguna.
WSAEINVAL
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.
WSAENOBUFS
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:

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.

Catatan Saat mengeluarkan panggilan Winsock pemblokiran seperti WSAPoll dengan parameter batas waktu yang diatur ke angka negatif, Winsock mungkin perlu menunggu peristiwa jaringan sebelum panggilan dapat selesai. Winsock melakukan penantian yang dapat diperingatkan dalam situasi ini, yang dapat terganggu oleh panggilan prosedur asinkron (APC) yang dijadwalkan pada utas yang sama. Mengeluarkan panggilan Winsock pemblokiran lain di dalam APC yang mengganggu panggilan Winsock pemblokiran yang sedang berlangsung pada utas yang sama akan menyebabkan perilaku yang tidak terdefinisi, dan tidak boleh dicoba oleh klien Winsock.
 
Catatan Pada Windows 10 versi 2004, ketika soket TCP gagal tersambung, (POLLHUP \| POLLERR \| POLLWRNORM) ditunjukkan.
 

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

Lihat juga

WSAGetLastError

WSAPOLLFD