CSocketFile::CSocketFile
更新 : 2007 年 11 月
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