次の方法で共有


CSocketFile::CSocketFile

CSocketFile オブジェクトを構築します。

explicit CSocketFile(
   CSocket* pSocket,
   BOOL bArchiveCompatible = TRUE 
);

パラメーター

  • pSocket
    CSocketFile オブジェクトに関連付けられるソケット。

  • bArchiveCompatible
    ファイル オブジェクトを CArchive オブジェクトと組み合わせて使用するかどうかを指定します。 スタンドアロンの CFile オブジェクトのように特定の制限のもとで、スタンドアロンの方法で CSocketFile オブジェクトを使用するだけのときは FALSE を渡します。 このフラグは、CSocketFile オブジェクトに関連付けられた CArchive オブジェクトが読み込み用のバッファーを管理する方法を変更します。

解説

オブジェクトがスコープ外に出るか、オブジェクトが削除されたときに、オブジェクトのデストラクターはオブジェクト自身をソケット オブジェクトから切り離します。

注意

CSocketFile は、CArchive オブジェクトと組み合わせずに (制限付きの) ファイルとして扱うこともできます。 既定では、CSocketFile コンストラクターのパラメーター bArchiveCompatible は TRUE です。 これは、ファイル オブジェクトがアーカイブと組み合わせて使われることを示しています。 ファイル オブジェクトをアーカイブなしで使うには、パラメーター bArchiveCompatible で FALSE を渡します。

"アーカイブ互換" モードでは、CSocketFile オブジェクトのパフォーマンスは向上し、"デッドロック" の危険性は減少します。デッドロックは送信ソケットと受信ソケットが互いに待ち状態になったとき、または共通リソースに対して待ち状態になったとき発生します。 この状況は、CArchive オブジェクトが CFile オブジェクトと組み合わされて動作したときと同じように、CArchive オブジェクトが CSocketFile オブジェクトと組み合わされて動作したときに発生することがあります。 CFile との連係時のアーカイブは、受信したバイト数が要求数より少ないと、ファイルの終わりに達したと判断します。

しかし、CSocketFile の場合は、データがメッセージ単位であるため、バッファーに複数のメッセージを保持できます。したがって、受信したバイト数が要求バイト数より少なくても、ファイルの終わりに達したとは判断しません。 アプリケーションは CFile で行ったようなブロックをせずに、バッファーが空になるまでメッセージの読み取りを続けます。 この場合、アーカイブのバッファーの状態を管理するには CArchive::IsBufferEmpty 関数が有用です。

使用の詳細についてはCSocketFile、記事を参照してくださいWindows ソケット:アーカイブとソケットを使用してWindows ソケット:アーカイブを使用してソケットの例

必要条件

**ヘッダー:**afxsock.h

参照

参照

CSocketFile クラス

階層図

CFile::CFile

CFile::Read

その他の技術情報

CSocketFile のメンバー