Bagikan melalui


Fungsi WSACleanup (winsock.h)

Fungsi WSACleanup mengakhiri penggunaan Winsock 2 DLL (Ws2_32.dll).

Sintaks

int WSACleanup();

Mengembalikan nilai

Nilai yang dikembalikan adalah nol jika operasi berhasil. Jika tidak, nilai SOCKET_ERROR dikembalikan, dan nomor kesalahan tertentu dapat diambil dengan memanggil WSAGetLastError.

Dalam lingkungan multithreaded, WSACleanup mengakhiri operasi Windows Sockets untuk semua utas.

Kode kesalahan Makna
WSANOTINITIALISED
Panggilan WSAStartup yang berhasil harus terjadi sebelum menggunakan fungsi ini.
WSAENETDOWN
Subsistem jaringan gagal.
WSAEINPROGRESS
Pemblokiran panggilan Windows Sockets 1.1 sedang berlangsung, atau penyedia layanan masih memproses fungsi panggilan balik.

Keterangan

Aplikasi atau DLL diperlukan untuk melakukan panggilan WSAStartup yang berhasil sebelum dapat menggunakan layanan Windows Sockets. Ketika telah menyelesaikan penggunaan Windows Sockets, aplikasi atau DLL harus memanggil WSACleanup untuk membatalkan pendaftaran dirinya dari implementasi Windows Sockets dan memungkinkan implementasi untuk membebaskan sumber daya apa pun yang dialokasikan atas nama aplikasi atau DLL.

Ketika WSACleanup dipanggil, setiap pemblokiran tertunda atau panggilan Windows Sockets asinkron yang dikeluarkan oleh utas apa pun dalam proses ini dibatalkan tanpa memposting pesan pemberitahuan apa pun atau tanpa memberi sinyal objek peristiwa apa pun. Setiap operasi kirim atau terima yang tumpang tindih yang tertunda (WSASend, WSASendTo, WSARecv, atau WSARecvFrom dengan soket yang tumpang tindih, misalnya) yang dikeluarkan oleh utas apa pun dalam proses ini juga dibatalkan tanpa mengatur objek peristiwa atau memanggil rutinitas penyelesaian, jika satu ditentukan. Dalam hal ini, operasi tumpang tindih yang tertunda gagal dengan status kesalahan WSA_OPERATION_ABORTED.

Soket yang terbuka ketika WSACleanup dipanggil diatur ulang dan secara otomatis dibatalkan alokasinya seolah-olah closesocket dipanggil. Soket yang telah ditutup dengan closesocket tetapi data yang masih tertunda untuk dikirim dapat terpengaruh ketika WSACleanup dipanggil. Dalam hal ini, data yang tertunda dapat hilang jika WS2_32.DLL dibongkar dari memori saat aplikasi keluar. Untuk memastikan bahwa semua data yang tertunda dikirim, aplikasi harus menggunakan matikan untuk menutup koneksi, lalu menunggu hingga penutupan selesai sebelum memanggil closesocket dan WSACleanup. Semua sumber daya dan status internal, seperti pesan yang tidak diposting atau diposting yang diantrekan, harus dibatalkan alokasinya agar tersedia untuk pengguna berikutnya.

Harus ada panggilan ke WSACleanup untuk setiap panggilan yang berhasil ke WSAStartup. Hanya panggilan fungsi WSACleanup akhir yang melakukan pembersihan aktual. Panggilan sebelumnya hanya mengurangi jumlah referensi internal dalam WS2_32.DLL.

CatatanWSACleanup tidak membatalkan pendaftaran nama (nama serekan, misalnya) yang mungkin telah terdaftar di penyedia namespace Layanan Soket Windows seperti penyedia namespace Protokol Resolusi Nama Serekan (PNRP).
 
Di Windows Sockets 1.1, mencoba memanggil WSACleanup dari dalam hook pemblokiran dan kemudian gagal memeriksa kode pengembalian adalah kesalahan pemrograman umum. Jika aplikasi Winsock 1.1 perlu berhenti saat panggilan pemblokiran luar biasa, aplikasi harus terlebih dahulu membatalkan panggilan pemblokiran dengan WSACancelBlockingCall , maka terbitkan panggilan WSACleanup setelah kontrol dikembalikan ke aplikasi. Di Windows Sockets 2, masalah ini tidak ada dan fungsi WSACancelBlockingCall telah dihapus.

Fungsi WSACleanup biasanya menyebabkan DLL pembantu khusus protokol dibongkar. Akibatnya, fungsi WSACleanup tidak boleh dipanggil dari fungsi DllMain dalam DLL aplikasi. Hal ini berpotensi menyebabkan kebuntuan. Untuk informasi selengkapnya, silakan lihat Fungsi Utama DLL.

Windows Phone 8: Fungsi ini didukung untuk aplikasi Windows Phone Store di Windows Phone 8 dan yang lebih baru.

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 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header winsock.h (termasuk Winsock2.h)
Pustaka Ws2_32.lib
DLL Ws2_32.dll

Lihat juga

API Penyedia Namespace PNRP

WSAStartup

Fungsi Winsock

Referensi Winsock

closesocket

Shutdown