WSACleanup 関数 (winsock.h)

WSACleanup 関数は、Winsock 2 DLL (Ws2_32.dll) の使用を終了します。

構文

int WSACleanup();

戻り値

操作が成功した場合、戻り値は 0 です。 それ以外の場合は、SOCKET_ERROR値が返され、 WSAGetLastError を呼び出すことによって特定のエラー番号を取得できます。

マルチスレッド環境では、 WSACleanup はすべてのスレッドの Windows ソケット操作を終了します。

エラー コード 意味
WSANOTINITIALIZED
この関数を使用する前に 、WSAStartup 呼び出しが正常に行われる必要があります。
WSAENETDOWN
ネットワーク サブシステムが失敗しました。
WSAEINPROGRESS
ブロックしている Windows ソケット 1.1 呼び出しが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。

注釈

Windows ソケット サービスを使用する前に 、WSAStartup 呼び出しを正常に実行するには、アプリケーションまたは DLL が必要です。 Windows ソケットの使用が完了したら、アプリケーションまたは DLL で WSACleanup を呼び出して、Windows ソケットの実装から自身を登録解除し、アプリケーションまたは DLL に代わって割り当てられたリソースを解放できるようにする必要があります。

WSACleanup が呼び出されると、このプロセス内の任意のスレッドによって発行された保留中のブロックまたは非同期の Windows ソケット呼び出しは、通知メッセージを投稿したり、イベント オブジェクトを通知したりせずに取り消されます。 このプロセスのスレッドによって発行された保留中の重複する送受信操作 (WSASendWSASendToWSARecv、WSARecvFrom、または WSARecvFrom と重複するソケットなど) も、イベント オブジェクトを設定したり、完了ルーチンを呼び出したりせずに取り消されます (指定されている場合)。 この場合、保留中の重複した操作はエラー状態 WSA_OPERATION_ABORTEDで失敗します。

WSACleanup が呼び出されたときに開かれたソケットはリセットされ、closesocket が呼び出されたかのように自動的に割り当てが解除されます。 closesocket で閉じられているが、まだ送信される保留中のデータがあるソケットは、WSACleanup が呼び出されたときに影響を受ける可能性があります。 この場合、アプリケーションの終了時に WS2_32.DLL がメモリからアンロードされると、保留中のデータが失われる可能性があります。 保留中のすべてのデータが確実に送信されるようにするには、アプリケーションで シャットダウン を使用して接続を閉じ、閉じるのが完了するまで待ってから closesocketWSACleanup を呼び出す必要があります。 キューに登録されていないメッセージや投稿されたメッセージなど、すべてのリソースと内部状態は、次のユーザーが使用できるように割り当てを解除する必要があります。

WSAStartup の呼び出しが成功するたびに、WSACleanup の呼び出しが必要です。 最終的な WSACleanup 関数呼び出しのみが実際のクリーンアップを実行します。 上記の呼び出しは、WS2_32.DLL 内の内部参照カウントをデクリメントするだけです。

メモWSACleanup では、ピア名解決プロトコル (PNRP) 名前空間プロバイダーなどの Windows ソケット名前空間プロバイダーに登録されている可能性がある名前 (ピア名など) の登録を解除しません。
 
Windows Sockets 1.1 では、ブロッキング フック内から WSACleanup を呼び出そうとした後、リターン コードをチェックできなかったのは、一般的なプログラミング エラーでした。 ブロック呼び出しが未処理の間に Winsock 1.1 アプリケーションを終了する必要がある場合、アプリケーションはまず WSACancelBlockingCall を使用してブロック呼び出しを取り消し、制御がアプリケーションに返されたら WSACleanup 呼び出しを発行する必要があります。 Windows ソケット 2 では、この問題は存在せず、 WSACancelBlockingCall 関数が削除されました。

WSACleanup 関数を使用すると、通常、プロトコル固有のヘルパー DLL がアンロードされます。 その結果、アプリケーション DLL の DllMain 関数から WSACleanup 関数を呼び出さないでください。 これにより、デッドロックが発生する可能性があります。 詳細については、 DLL のメイン関数に関するページを参照してください。

Windows Phone 8: この関数は、Windows Phone 8 以降のWindows Phone ストア アプリでサポートされています。

Windows 8.1Windows Server 2012 R2: この関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。

要件

要件
サポートされている最小のクライアント Windows 8.1、 Windows Vista [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー winsock.h (Winsock2.h を含む)
Library Ws2_32.lib
[DLL] Ws2_32.dll

こちらもご覧ください

PNRP 名前空間プロバイダー API

WSAStartup

Winsock 関数

Winsock リファレンス

closesocket

shutdown