WSARecvDisconnect 関数 (winsock2.h)

WSARecvDisconnect 関数はソケットの受信を終了し、ソケットが接続指向の場合は切断データを取得します。

構文

int WSAAPI WSARecvDisconnect(
  [in]  SOCKET   s,
  [out] LPWSABUF lpInboundDisconnectData
);

パラメーター

[in] s

ソケットを識別する記述子。

[out] lpInboundDisconnectData

受信切断データへのポインター。

戻り値

エラーが発生しない場合、 WSARecvDisconnect は 0 を返します。 それ以外の場合は、SOCKET_ERRORの値が返され、 WSAGetLastError を呼び出すことによって特定のエラー コードを取得できます。

エラー コード 意味
WSANOTINITIALIZED
この関数を使用する前に、 WSAStartup 呼び出しが正常に行われる必要があります。
WSAENETDOWN
ネットワーク サブシステムが失敗しました。
WSAEFAULT
パラメーター lpInboundDisconnectData によって参照されるバッファーが小さすぎます。
WSAENOPROTOOPT
切断データは、指定されたプロトコル ファミリではサポートされていません。 WSAENOPROTOOPT エラー コードを返すために、切断データをサポートしない TCP/IP の実装は必要ありません。 Microsoft による TCP/IP の実装については、「解説」セクションを参照してください。
WSAEINPROGRESS
ブロックしている Windows Sockets 1.1 呼び出しが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。
WSAENOTCONN
ソケットが接続されていません (接続指向のソケットのみ)。
WSAENOTSOCK
記述子はソケットではありません。

注釈

WSARecvDisconnect 関数は、接続指向ソケットで使用され、受信を無効にし、リモート パーティから受信切断データを取得します。 これはシャットダウン (SD_RECEIVE) と同じですが、 WSARecvDisconnect では切断データの受信も許可されます (これをサポートするプロトコル内)。

この関数が正常に発行されると、ソケットでの後続の受信は許可されません。 WSARecvDisconnect を呼び出しても、下位のプロトコル レイヤーには影響しません。 TCP ソケットの場合、受け取りを待機しているソケットにまだデータがキューに入っている場合、またはデータが後続に到着した場合、データをユーザーに配信できないため、接続はリセットされます。 UDP の場合、受信データグラムは受け入れられ、キューに入れられます。 いずれの場合も、ICMP エラー パケットは生成されません。

メモ Windows での TCP/IP のネイティブ実装では、切断データはサポートされていません。 データの切断は、 WSAPROTOCOL_INFO構造に XP1_DISCONNECT_DATA フラグがある Windows ソケット プロバイダーでのみサポートされます。 WSAEnumProtocols 関数を使用して、インストールされているすべてのプロバイダーのWSAPROTOCOL_INFO構造を取得します。
 
受信切断データを正常に受信するには、アプリケーションで他のメカニズムを使用して、回線が閉じられたことを確認する必要があります。 たとえば、アプリケーションは、FD_CLOSE通知を受け取り、0 の戻り値を受け取るか、recvWSARecv/ から WSAEDISCON または WSAECONNRESET エラー コードを受信する必要があります。

WSARecvDisconnect 関数はソケットを閉じず、ソケットにアタッチされているリソースは closesocket が呼び出されるまで解放されません。

WSARecvDisconnect 関数は、ソケットのSO_LINGER設定に関係なくブロックしません。

アプリケーションは、 WSARecvDisconnect を使用して切断された後にソケットを再利用できることに依存しないでください。 特に、このようなソケットでの 接続 または WSAConnect の使用をサポートするために、Windows ソケット プロバイダーは必要ありません。

メモWSARecvDisconnect などのブロッキング Winsock 呼び出しを発行する場合、Winsock は、呼び出しを完了する前にネットワーク イベントを待機する必要がある場合があります。 Winsock は、この状況でアラート可能な待機を実行します。この待機は、同じスレッドでスケジュールされた非同期プロシージャ 呼び出し (APC) によって中断される可能性があります。 同じスレッドで進行中の Winsock 呼び出しを中断した APC 内で別のブロック Winsock 呼び出しを発行すると、未定義の動作が発生し、Winsock クライアントが試行してはなりません。
 

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winsock2.h
Library Ws2_32.lib
[DLL] Ws2_32.dll

こちらもご覧ください

WSAConnect

WSAEnumProtocols

WSAGetLastError

WSAPROTOCOL_INFO

WSARecv

Winsock 関数

Winsock リファレンス

closesocket

connect

socket