2009-08-05 10 views
1

N個のファイルディスクリプタをN個のファイルディスクリプタ(つまりNソケット)のいずれかで受信したデータを単一のファイルディスクリプタの呼び出し元APIに転送するように、N個のファイルディスクリプタを1つのファイルディスクリプタとしてプログラムに見せることは可能ですか?実際には別のファイル記述子から来ているかもしれないという事実を隠していますか?同様に抽象化された書き込みを行うことも可能ですか(ただし、正しいN番目のファイル記述子に戻りますか?)N:1つのファイル記述子?

+0

「正しいN番目の」ディスクリプタはどういう意味ですか? 「同様に抽象化された」とは、「正しい」記述子ではなくすべての記述子に書き込むことを意味する。それ以外の場合は、マルチプレクサ/デマルチプレクサのペアを構築しようとしていますが、読み書きチャンクにNを埋め込む方法が必要です。 –

+0

パイプを連想させる... – mpen

答えて

3

socket」というタグを付けて使用しているため、データがネットワークパスを経由していると想定し、実際には同じソケットを介して複数のソースを読み取る必要があります。

TCP/IPソケットを使用して作業している場合は、UDPソケットが、複数の送信元がデータを送信できるローカルポートで待機しています。

あなたはこのようなTCPソケットを持つことはできませんが、しかしselect APIを使用すると、複数のTCPリスニングソケット、ソースごとに1つずつ開いてみましょう、その後、全体の多くの上の選択を行うために、すべての標準実装で提供されています。ここでソースを「隠す」ことはできません。

抽象はあなたが後にしている何であれば、良いアイデアは、この複数の通信のエンドポイントを管理し、IPCの上に主要アプリケーションと話をする小さなアプリケーションを書くことになります。この小さなアプリケーションにエンドポイントに対処するためのショートヘッダーを実装することができます。プライマリアプリケーションは、1つの通信ポイント上のすべてを表示します。

また、書き込みをうまく抽象化するという問題も解決します。