Fungsi panggilan balik LPWSPACCEPT (ws2spi.h)
Fungsi LPWSPAccept secara kondisional menerima koneksi berdasarkan nilai pengembalian fungsi kondisi.
Sintaksis
LPWSPACCEPT Lpwspaccept;
SOCKET Lpwspaccept(
[in] SOCKET s,
[out] sockaddr *addr,
[in, out] LPINT addrlen,
[in] LPCONDITIONPROC lpfnCondition,
[in] DWORD_PTR dwCallbackData,
[out] LPINT lpErrno
)
{...}
Parameter
[in] s
Deskriptor mengidentifikasi soket yang mendengarkan koneksi setelah LPWSPListen.
[out] addr
Penunjuk opsional ke buffer yang menerima alamat entitas penghubung, seperti yang diketahui oleh penyedia layanan. Format yang tepat dari parameter addr
[in, out] addrlen
Penunjuk opsional ke bilangan bulat yang berisi panjang parameter addr
[in] lpfnCondition
Alamat instans prosedur dari fungsi kondisi opsional yang dilengkapi oleh Windows Sockets. Fungsi ini digunakan dalam keputusan terima atau tolak berdasarkan informasi pemanggil yang diteruskan sebagai parameter.
[in] dwCallbackData
Data panggilan balik yang akan diteruskan kembali ke klien Windows Socket 2 sebagai nilai parameter dwCallbackData fungsi kondisi. Parameter ini tidak ditafsirkan oleh penyedia layanan.
[out] lpErrno
Penunjuk ke kode kesalahan.
Mengembalikan nilai
Jika tidak ada kesalahan yang terjadi, LPWSPAccept mengembalikan nilai jenis SOCKET yang merupakan deskriptor untuk soket yang diterima. Jika tidak, nilai INVALID_SOCKET dikembalikan, dan kode kesalahan tertentu tersedia di lpErrno.
Kode Kesalahan | Arti |
---|---|
Permintaan koneksi ditolak secara paksa seperti yang ditunjukkan dalam nilai pengembalian fungsi kondisi (CF_REJECT). | |
|
Koneksi masuk ditunjukkan, tetapi kemudian dihentikan oleh peer jarak jauh sebelum menerima panggilan. |
|
Subsistem jaringan gagal. |
Parameter addrlen |
|
|
Panggilan (pemblokiran) dibatalkan melalui LPWSPCancelBlockingCall. |
Panggilan Windows Sockets pemblokiran sedang berlangsung. | |
LPWSPListen tidak dipanggil sebelum LPWSPAccept, parameter g yang ditentukan dalam fungsi kondisi bukan nilai yang valid, nilai pengembalian fungsi kondisi bukan nilai yang valid, atau kasus apa pun di mana soket yang ditentukan berada dalam status tidak valid. | |
|
Antrean tidak ada gunanya setelah masuk ke LPWSPAccept dan tidak ada deskriptor soket yang tersedia. |
|
Tidak ada ruang buffer yang tersedia. |
|
Deskriptor bukan soket. |
Soket yang direferensikan bukan jenis yang mendukung layanan berorientasi koneksi. | |
Penerimaan permintaan koneksi ditangguhkan seperti yang ditunjukkan dalam nilai pengembalian fungsi kondisi (CF_DEFER). | |
Soket ditandai sebagai tidak memblokir dan tidak ada koneksi yang akan diterima. | |
|
Permintaan koneksi yang ditawarkan telah kehabisan waktu atau ditarik. |
Komentar
Fungsi LPWSPAccept mengekstrak koneksi pertama pada antrean koneksi yang tertunda pada soket s, dan memeriksanya terhadap fungsi kondisi, asalkan fungsi kondisi ditentukan (yaitu, bukan null). Fungsi kondisi harus dijalankan dalam utas yang sama dengan rutinitas ini. Jika fungsi kondisi mengembalikan CF_ACCEPT, LPWSPAccept membuat soket baru.
Soket yang baru dibuat memiliki properti yang sama dengan soket s, termasuk peristiwa jaringan yang terdaftar di LPWSPAsyncSelect atau dengan LPWSPEventSelect. Seperti yang dijelaskan dalamDescriptorAllocation
Jika fungsi kondisi mengembalikan CF_REJECT, LPWSPAccept menolak permintaan koneksi. Jika keputusan terima/tolak aplikasi tidak dapat segera dibuat, fungsi kondisi akan mengembalikan CF_DEFER untuk menunjukkan bahwa tidak ada keputusan yang dibuat. Tidak ada tindakan tentang permintaan koneksi ini yang akan diambil oleh penyedia layanan. Ketika aplikasi siap untuk mengambil tindakan pada permintaan koneksi, aplikasi akan memanggil LPWSPAccept lagi dan mengembalikan CF_ACCEPT atau CF_REJECT sebagai nilai pengembalian dari fungsi kondisi.
Untuk soket yang berada dalam mode pemblokiran (default), jika tidak ada koneksi yang tertunda yang ada pada antrean, LPWSPAccept memblokir pemanggil hingga koneksi ada. Untuk soket dalam mode nonblocking, jika fungsi ini dipanggil ketika tidak ada koneksi yang tertunda yang ada pada antrean, LPWSPAccept mengembalikan kode kesalahan WSAEWOULDBLOCK. Soket yang diterima tidak dapat digunakan untuk menerima lebih banyak koneksi. Soket asli tetap terbuka.
Parameter addr adalah parameter hasil yang diisi dengan alamat entitas penghubung, seperti yang diketahui oleh penyedia layanan. Format yang tepat dari parameter addr
Prototipe fungsi kondisi adalah sebagai berikut.
int CALLBACK
ConditionFunc(
IN LPWSABUF lpCallerId,
IN LPWSABUF lpCallerData,
IN OUT LPQOS lpSQOS,
IN OUT LPQOS lpGQOS,
IN LPWSABUF lpCalleeId,
IN LPWSABUF lpCalleeData,
OUT GROUP FAR * g,
IN DWORD_PTR dwCallbackData
);
lpCallerId dan lpCallerData adalah parameter nilai yang harus berisi alamat entitas penghubung dan data pengguna apa pun yang dikirim bersama dengan permintaan koneksi. Jika tidak ada pengidentifikasi pemanggil atau data pemanggil yang tersedia, parameter yang sesuai akan null. Banyak protokol jaringan tidak mendukung data pemanggil waktu sambung. Sebagian besar protokol jaringan konvensional dapat diharapkan untuk mendukung informasi pengidentifikasi pemanggil pada waktu permintaan koneksi. Bagian buf
Parameter lpSQOS mereferensikan spesifikasi alur untuk soket s yang ditentukan oleh pemanggil, satu untuk setiap arah, diikuti oleh parameter khusus penyedia tambahan. Nilai spesifikasi alur pengiriman atau penerimaan akan diabaikan sebagaimana mestinya untuk soket searah apa pun. Nilai null untuk lpSQOS menunjukkan bahwa tidak ada QoS yang disediakan penelepon dan tidak ada negosiasi yang dimungkinkan. Penunjuk non-
lpCalleeData adalah parameter hasil yang digunakan oleh fungsi kondisi untuk menyediakan data pengguna kembali ke entitas penghubung. Penyimpanan untuk data ini harus disediakan oleh penyedia layanan. lensa lpCalleeData-> awalnya berisi panjang buffer yang dialokasikan oleh penyedia layanan dan ditunjukkan oleh lpCalleeData->buf. Nilai nol berarti meneruskan data pengguna kembali ke pemanggil tidak didukung. Fungsi kondisi akan menyalin hinggalpCalleeData
Nilai parameter dwCallbackData
Persyaratan
Syarat | Nilai |
---|---|
klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
server minimum yang didukung |
Windows 2000 Server [hanya aplikasi desktop] |
Platform Target |
Windows |
Header |
ws2spi.h |
Lihat juga
LPWSPBind
LPWSPListen