Fungsi WSAAsyncGetServByPort (winsock.h)
Fungsi WSAAsyncGetServByPort secara asinkron mengambil informasi layanan yang sesuai dengan port dan protokol.
Sintaks
HANDLE WSAAsyncGetServByPort(
[in] HWND hWnd,
[in] u_int wMsg,
[in] int port,
[in] const char *proto,
[out] char *buf,
[in] int buflen
);
Parameter
[in] hWnd
Tangani jendela yang akan menerima pesan ketika permintaan asinkron selesai.
[in] wMsg
Pesan yang akan diterima ketika permintaan asinkron selesai.
[in] port
Port untuk layanan, dalam urutan byte jaringan.
[in] proto
Penunjuk ke nama protokol. Ini bisa NULL, dalam hal ini WSAAsyncGetServByPort akan mencari entri layanan pertama yang s_port cocok dengan port yang diberikan. Jika tidak, WSAAsyncGetServByPort cocok dengan port dan proto.
[out] buf
Arahkan ke area data untuk menerima data servent . Area data harus lebih besar dari ukuran struktur servent karena area data digunakan oleh Windows Sockets untuk berisi struktur servent dan semua data yang dirujuk oleh anggota struktur servent . Buffer byte MAXGETHOSTSTRUCT disarankan.
[in] buflen
Ukuran area data untuk parameter buf , dalam byte.
Mengembalikan nilai
Nilai yang dikembalikan menentukan apakah operasi asinkron berhasil dimulai atau tidak. Ini tidak menyiratkan keberhasilan atau kegagalan operasi itu sendiri.
Jika tidak ada kesalahan yang terjadi, WSAAsyncGetServByPort mengembalikan nilai bukan nol dari jenis HANDLE yang merupakan handel tugas asinkron untuk permintaan (tidak bingung dengan Windows HTASK). Nilai ini dapat digunakan dengan dua cara. Ini dapat digunakan untuk membatalkan operasi menggunakan WSACancelAsyncRequest, atau dapat digunakan untuk mencocokkan operasi asinkron dan pesan penyelesaian, dengan memeriksa parameter pesan wParam .
Jika operasi asinkron tidak dapat dimulai, WSAAsyncGetServByPort mengembalikan nilai nol, dan nomor kesalahan tertentu dapat diambil dengan memanggil WSAGetLastError.
Kode kesalahan berikut dapat diatur saat jendela aplikasi menerima pesan. Seperti yang dijelaskan di atas, mereka dapat diekstraksi dari lParam dalam pesan balasan menggunakan makro WSAGETASYNCERROR .
Kode kesalahan | Makna |
---|---|
Subsistem jaringan gagal. | |
Ruang buffer tidak cukup tersedia. | |
Parameter proto atau buf tidak berada di bagian ruang alamat proses yang valid. | |
Port jawaban otoritatif tidak ditemukan. | |
Port non-otoritatif tidak ditemukan, atau kegagalan server. | |
Kesalahan yang tidak dapat dipulihkan, database layanan tidak dapat diakses. | |
Nama yang valid, tidak ada catatan data dari jenis yang diminta. |
Kesalahan berikut dapat terjadi pada saat panggilan fungsi, dan menunjukkan bahwa operasi asinkron tidak dapat dimulai.
Kode kesalahan | Makna |
---|---|
WSANOTINITIALISED | Panggilan WSAStartup yang berhasil harus terjadi sebelum menggunakan fungsi ini. |
WSAENETDOWN | Subsistem jaringan gagal. |
WSAEINPROGRESS | Panggilan Windows Sockets 1.1 yang diblokir sedang berlangsung, atau penyedia layanan masih memproses fungsi panggilan balik. |
WSAEWOULDBLOCK | Operasi asinkron tidak dapat dijadwalkan saat ini karena sumber daya atau batasan lain dalam implementasi Windows Sockets. |
Keterangan
Fungsi WSAAsyncGetServByPort adalah versi asinkron dari getservbyport, dan digunakan untuk mengambil informasi layanan yang sesuai dengan nomor port. Windows Sockets memulai operasi dan segera kembali ke pemanggil, meneruskan kembali handel tugas buram dan asinkron yang dapat digunakan aplikasi untuk mengidentifikasi operasi. Ketika operasi selesai, hasilnya (jika ada) disalin ke dalam buffer yang disediakan oleh pemanggil dan pesan dikirim ke jendela aplikasi.
Ketika operasi asinkron telah selesai, jendela aplikasi yang ditunjukkan oleh parameter hWnd menerima pesan dalam parameter wMsg . Parameter wParam berisi handel tugas asinkron seperti yang dikembalikan oleh panggilan fungsi asli. LParam 16 bit tinggi berisi kode kesalahan apa pun. Kode kesalahan dapat berupa kesalahan apa pun seperti yang didefinisikan dalam Winsock2.h. Kode kesalahan nol menunjukkan keberhasilan penyelesaian operasi asinkron.
Setelah berhasil diselesaikan, buffer yang ditentukan ke panggilan fungsi asli berisi struktur servent . Untuk mengakses anggota struktur ini, alamat buffer asli harus ditransmisikan ke penunjuk struktur servent dan diakses sebagaimana mestinya.
Jika kode kesalahan adalah WSAENOBUFS, ukuran buffer yang ditentukan oleh buflen dalam panggilan asli terlalu kecil untuk berisi semua informasi yang dihasilkan. Dalam hal ini, lParam 16 bit rendah berisi ukuran buffer yang diperlukan untuk menyediakan semua informasi yang diperlukan. Jika aplikasi memutuskan bahwa data parsial tidak memadai, aplikasi dapat mengeluarkan kembali panggilan fungsi WSAAsyncGetServByPort dengan buffer yang cukup besar untuk menerima semua informasi yang diinginkan (yaitu, tidak lebih kecil dari lParam 16 bit rendah).
Buffer yang ditentukan untuk fungsi ini digunakan oleh Windows Sockets untuk membangun struktur servent bersama dengan konten area data yang dirujuk oleh anggota struktur servent yang sama. Untuk menghindari kesalahan WSAENOBUFS , aplikasi harus menyediakan buffer setidaknya MAXGETHOSTSTRUCT byte (seperti yang didefinisikan dalam Winsock2.h).
Kode kesalahan dan panjang buffer harus diekstraksi dari lParam menggunakan makro WSAGETASYNCERROR dan WSAGETASYNCBUFLEN, didefinisikan dalam Winsock2.h sebagai:
#include <windows.h>
#define WSAGETASYNCBUFLEN(lParam) LOWORD(lParam)
#define WSAGETASYNCERROR(lParam) HIWORD(lParam)
Penggunaan makro ini akan memaksimalkan portabilitas kode sumber untuk aplikasi.
Persyaratan
Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
Target Platform | Windows |
Header | winsock.h (termasuk Winsock2.h) |
Pustaka | Ws2_32.lib |
DLL | Ws2_32.dll |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk