Linuxでp2pアプリケーションを作成しようとしていますが、これをできるだけ効率的に実行したいと考えています。
私が抱えている問題は、パケットの管理にあります。ご存知のように、recv()バッファには常に複数のパケットが存在する可能性があるため、複数のパケットが1つの大きなパケットとして扱われないようにするために何らかのメッセージフレーミングシステムが必要です。
したがって、現時点での私のパケット構造は次のとおりです。
(u16int Packet Length):(Packet Data)
これには、recv()を2回呼び出す必要があります。1つはパケットサイズを取得し、もう1つはパケットを取得します。
これには2つの主な問題があります。
1. A malicious peer could send a packet with a size header of
something large, but not send any more data. The application will
hang on the second recv(), waiting for data that will never come.
2. Assuming that calling Recv() has a noticeable performance penalty
(I actually have no idea, correct me if I am wrong) calling Recv() twice
will slow the program down.
最高の効率と安定性の両方のためにパケット/受信システムを構築するための最良の方法は何ですか?他のアプリケーションはどのようにそれを行いますか?おすすめは何ですか?
前もって感謝します。