Bagikan melalui


Fungsi panggilan balik LPWSPCANCELBLOCKINGCALL (ws2spi.h)

Fungsi LPWSPCancelBlockingCall membatalkan panggilan pemblokiran yang saat ini sedang berlangsung.

Sintaks

LPWSPCANCELBLOCKINGCALL Lpwspcancelblockingcall;

int Lpwspcancelblockingcall(
  [out] LPINT lpErrno
)
{...}

Parameter

[out] lpErrno

Arahkan ke kode kesalahan.

Mengembalikan nilai

Nilai yang dikembalikan oleh LPWSPCancelBlockingCall adalah nol jika operasi berhasil dibatalkan. Jika tidak, nilai SOCKET_ERROR dikembalikan, dan kode kesalahan tertentu tersedia di lpErrno.

Kode Kesalahan Makna
WSAENETDOWN
Subsistem jaringan gagal.
WSAEINVAL
Menunjukkan tidak ada panggilan pemblokiran yang luar biasa.

Keterangan

Fungsi ini membatalkan operasi pemblokiran yang luar biasa untuk utas ini. Biasanya digunakan dalam dua situasi:

  • Klien Windows Sockets SPI sedang memproses pesan yang telah diterima saat penyedia layanan menerapkan pseudoblocking. Dalam hal ini, WSAIsBlocking akan benar.
  • Panggilan pemblokiran sedang berlangsung dan penyedia layanan Winsock telah memanggil kembali ke fungsi hook pemblokiran klien Winsock SPI (melalui fungsi panggilan balik yang diambil dari WPUQueryBlockingCallback), yang pada gilirannya memanggil fungsi ini. Situasi seperti itu mungkin muncul, misalnya, dalam menerapkan opsi Batal untuk operasi yang memerlukan waktu lama untuk diselesaikan.

Dalam setiap kasus, panggilan pemblokiran asli akan berakhir sesegera mungkin dengan kesalahan WSAEINTR. (Dalam contoh pertama penghentian tidak akan terjadi sampai penjadwalan pesan Windows telah menyebabkan kontrol untuk kembali ke rutinitas pemblokiran semu di Winsock. Dalam instans kedua, panggilan pemblokiran akan dihentikan segera setelah fungsi kait pemblokiran selesai.)

Dalam kasus pemblokiran operasi LPWSPConnect , Winsock akan menghentikan panggilan pemblokiran sesegera mungkin, tetapi tidak mungkin sumber daya soket dirilis sampai koneksi selesai (dan kemudian direset) atau kehabisan waktu. Ini kemungkinan akan terlihat hanya jika klien Winsock SPI segera mencoba membuka soket baru (jika tidak ada soket yang tersedia), atau untuk terhubung ke serekan yang sama melalui panggilan LPWSPConnect .

Membatalkan LPWSPAccept atau panggilan LPWSPSelect tidak berdampak buruk pada soket yang diteruskan ke panggilan ini. Hanya panggilan tertentu yang gagal; operasi apa pun yang legal sebelum pembatalan adalah sah setelah pembatalan, dan status soket tidak terpengaruh dengan cara apa pun.

Membatalkan operasi apa pun selain LPWSPAccept dan LPWSPSelect dapat membiarkan soket dalam keadaan tidak ditentukan. Jika klien Winsock SPI membatalkan operasi pemblokiran pada soket, satu-satunya operasi yang dapat dilakukan klien Winsock SPI pada soket adalah panggilan ke LPWSPCloseSocket, meskipun operasi lain dapat bekerja pada beberapa penyedia layanan Winsock. Jika klien Winsock SPI memerlukan portabilitas maksimum, klien harus berhati-hati agar tidak bergantung pada operasi setelah operasi pembatalan. Klien Winsock SPI dapat mengatur ulang koneksi dengan mengatur batas waktu SO_LINGER ke nol dan memanggil LPWSPCloseSocket.

Jika operasi pembatalan membahayakan integritas aliran data SOCK_STREAM dengan cara apa pun, penyedia Winsock akan mengatur ulang koneksi dan gagal semua operasi di masa mendatang selain LPWSPCloseSocket dengan WSAECONNABORTED.

LPWSPCancelBlockingCall dapat dikembalikan dengan sukses jika operasi jaringan pemblokiran selesai sebelum dibatalkan. Dalam hal ini, operasi pemblokiran akan berhasil ditampilkan seolah-olah LPWSPCancelBlockingCall tidak pernah dipanggil. Satu-satunya cara bagi klien Winsock SPI untuk mengonfirmasi bahwa operasi benar-benar dibatalkan adalah dengan memeriksa kode pengembalian WSAEINTR dari panggilan pemblokiran.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Header ws2spi.h

Lihat juga

WPUQueryBlockingCallback

WSAIsBlocking

LPWSPAccept

LPWSPCloseSocket

LPWSPPilih

LPWSPSocket