WSARecvDisconnect 関数は、ソケットの受信を終了し、コネクション指向ソケットであれば切断データを取得する。
WSARecvDisconnect s, lpInboundDisconnectData
s : [int] ソケットを識別する記述子。 lpInboundDisconnectData : [var] 受信側の切断データへのポインタ。
(プラグイン / モジュール : ws2_32.dll)
WSARecvDisconnect 関数は、ソケットの受信を終了し、コネクション指向ソケットであれば切断データを取得する。 [戻り値] エラーがない場合、WSARecvDisconnect はゼロを返す。そうでない場合は SOCKET_ERROR が返され、WSAGetLastError で特定のエラーコードを取得できる。 このドキュメントは省略されている。 [備考] WSARecvDisconnect 関数はコネクション指向ソケットで使用され、受信を無効化するとともにリモートから切断データを取得する。これは shutdown (SD_RECEIVE) と等価だが、プロトコルが対応していれば切断データの受信もできる点が異なる。この関数が正常に発行された後は、ソケット上のそれ以降の受信は不許可となる。WSARecvDisconnect を呼んでも下位プロトコル層には影響しない。TCP ソケットでは、ソケットにまだ受信待ちのデータが溜まっているか新たにデータが到着すると、ユーザーに配信できないため接続はリセットされる。UDP では受信データグラムは受理されキューに入る。いずれも ICMP エラーパケットが生成されることはない。注: Windows のネイティブ TCP/IP 実装は切断データをサポートしていない。切断データは、WSAPROTOCOL_INFO 構造体で XP1_DISCONNECT_DATA フラグが立っている Windows Sockets プロバイダでのみサポートされる。インストール済みプロバイダの WSAPROTOCOL_INFO 構造体を取得するには WSAEnumProtocols を使う。受信側切断データを正常に受け取るには、回路が閉じられたことをアプリケーション自身が別の手段で判定する必要がある。たとえば FD_CLOSE 通知の受信、recv/WSARecv からの 0 返却または WSAEDISCON/WSAECONNRESET エラーコードの受信などである。WSARecvDisconnect はソケットを閉じないので、closesocket が呼ばれるまでソケットに紐付くリソースは解放されない。WSARecvDisconnect はソケットの SO_LINGER 設定に関係なくブロックしない。WSARecvDisconnect 後に同じソケットを再利用できると期待すべきではない。特に、Winsock プロバイダがそのようなソケットに対する connect/WSAConnect の使用を保証する必要はない。注: WSARecvDisconnect のようなブロッキング Winsock 呼び出しを発行すると、Winsock はネットワークイベントの発生を待ってから呼び出しを完了する場合がある。この待機はアラート可能な待機で、同じスレッドにスケジュールされた APC によって中断され得る。中断中の APC 内からさらにブロッキング Winsock 呼び出しを発行すると未定義動作となるため、Winsock クライアントは決してそれを行ってはならない。
| プラグイン / モジュール | ws2_32.dll |
| バージョン | 1.0 |
| 作成日 | 2026/04/16 |
| 著作者 | IronHSP / CsWin32 bridge |
| URL | https://github.com/inovia/IronHSP |
| 備考 | Win32 API の ws2_32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。 |
| タイプ | 拡張命令 |
| グループ | Win32API |
| 対応環境 |
|
| hs ファイル | hsphelp\win32_ws2_32_gen2.hs |