WSACleanup

WSACleanup 関数 (winsock.h) は、WS2_32.dll の使用を終了する。

WSACleanup

(プラグイン / モジュール : ws2_32.dll)

解説

WSACleanup 関数 (winsock.h) は、WS2_32.dll の使用を終了する。

[戻り値]
操作が成功すれば戻り値はゼロである。そうでない場合は SOCKET_ERROR を返し、WSAGetLastError
を呼び出すことで特定のエラー番号を取得できる。マルチスレッド環境では、WSACleanup はすべてのスレッドの Windows
Sockets 操作を終了させる。
(以下省略)

[備考]
アプリケーションまたは DLL は、Windows Sockets サービスを使用する前に WSAStartup
の呼び出しに成功する必要がある。Windows Sockets の利用を終えたら、アプリケーションまたは DLL は WSACleanup
を呼び出して Windows Sockets
実装から登録解除し、自身のために確保されたリソースを実装に解放させる必要がある。WSACleanup
が呼び出されると、このプロセス内のどのスレッドが発行した未処理のブロッキングまたは非同期 Windows Sockets
呼び出しも、通知メッセージや任意のイベントオブジェクトのシグナリングなしにキャンセルされる。このプロセス内のどのスレッドが発行した未処理のオーバーラップ送受信操作
(たとえば WSASendWSASendToWSARecvWSARecvFrom のオーバーラップソケットでの呼び出し)
も、イベントオブジェクトのセットや完了ルーチンの呼び出し (指定されていた場合)
なしにキャンセルされる。この場合、未処理のオーバーラップ操作は WSA_OPERATION_ABORTED
エラーで失敗する。WSACleanup 呼び出し時にオープンされていたソケットは、closesocket
が呼ばれたかのようにリセットされ自動的に解放される。closesocket
でクローズされたがまだ送信すべきデータが残っているソケットは、WSACleanup
の呼び出しによって影響を受けることがある。この場合、アプリケーション終了時に WS2_32.DLL
がメモリからアンロードされると、保留データが失われる可能性がある。すべての保留データが送信されることを保証するには、アプリケーションは
shutdown で接続を閉じ、クローズが完了するのを待ってから closesocketWSACleanup
を呼び出すべきである。キュー内の未投稿または投稿済みメッセージなど、すべてのリソースと内部状態は、次のユーザーが使えるよう解放される必要がある。WSAStartup
呼び出しの成功それぞれに対し 1 回の WSACleanup 呼び出しが必要である。最後の WSACleanup
呼び出しのみが実際のクリーンアップを行う。それ以前の呼び出しは WS2_32.DLL 内の内部参照カウントをデクリメントするだけである。注
WSACleanup は、PNRP (Peer Name Resolution Protocol) ネームスペースプロバイダのような
Windows Sockets ネームスペースプロバイダに登録されている名前 (例: ピア名) の登録解除は行わない。Windows
Sockets 1.1 では、ブロッキングフック内から WSACleanup
を呼び出し、戻り値を確認しないのがよくあるプログラミングミスだった。Winsock 1.1
アプリケーションがブロッキング呼び出し中に終了する必要がある場合、アプリケーションはまず WSACancelBlockingCall
でブロッキング呼び出しをキャンセルし、制御がアプリケーションに戻ってから WSACleanup
呼び出しを発行しなければならなかった。Windows Sockets 2
ではこの問題は存在せず、WSACancelBlockingCall 関数は削除されている。WSACleanup
関数は通常、プロトコル固有のヘルパ DLL のアンロードを引き起こす。そのため、WSACleanup 関数をアプリケーション DLL の
DllMain 関数から呼び出してはならない。これはデッドロックを引き起こす可能性がある。詳しくは DLL Main Function
を参照。Windows Phone 8: この関数は Windows Phone 8 以降の Windows Phone
ストアアプリでサポートされる。Windows 8.1 および Windows Server 2012 R2: この関数は、Windows
8.1、Windows Server 2012 R2 以降の Windows ストアアプリでサポートされる。

情報

プラグイン / モジュールws2_32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の ws2_32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_ws2_32_gen2.hs