WSACleanup 関数 (winsock.h)

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

構文

int WSACleanup();

戻り値

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

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

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

注釈

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

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

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

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

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

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

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

Windows 8.1および Windows 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