3

サーバーがすべてのクライアントのソケットに共通の文字列を書き込む必要があるグループチャットサーバーのユースケースがありました。次に、ファイル記述子のリストをループし、各ファイル記述子に文字列を書き込むことで、これに対処しました。

今、私は問題に対するより良い解決策を見つけることを考えています. Linuxでティーシステムコールを使用して、サーバーからの単一の関数呼び出しでこれを行うことは可能ですか? 1 つのティーの出力を次のティーにもクライアント ソケットにも送信する必要があります。ティーの一方の端のファイル記述子をクライアントソケットに複製して、目的の効果を得ることができるかどうか疑問に思っています。

あなたが知っているユースケースの他の実装を提案してください。

ありがとう

4

1 に答える 1

2

システム コールでは、両方のtee(2)ファイル記述子がパイプである必要があるため、ソケットはカウントされません。およびシステム コールも要件を満たしていないようでsplice(2)、どちらもvmsplice(2)使用方法がわかりませんsendfile(2)

私はそのようなシステムコールに出くわしたことがありません。さまざまなデータを収集し、一度にすべてを書き込む必要があります (または読み取りの逆) - はい。しかし、一度に複数の出力に書き込むには - いいえ。

したがって、現在の「記述子のループ」は、AFAICT と同じくらい良いものです。

于 2010-08-10T04:12:18.090 に答える