WSARecvDisconnect

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
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