1

親と子の2つのプロセスがあります。親はソケットペアを確立し、フォークの一部として子に渡されます。次に、親は接続を受け入れ、子が処理するすべての新しいソケットfdを渡します。これはsendmsgを介して行われます。これは、着信接続の速度が1秒あたり約10の場合に正常に機能します。ただし、1秒あたり200に増加した後も、メッセージsendmsg:使用可能なバッファスペースがありません。これの理由は何でしょうか?そして、私は何をチェックする必要がありますか?

これまで私が考えたことは次のとおりです。他のソケット呼び出しと同様に、子がrecvmsgを実行するときに、ソケットペアバッファーから削除する必要があるかどうか疑問に思っています。

4

1 に答える 1

1

最も可能性の高い理由は、子プロセスがソケットから十分な速度で読み取れないため、親がカーネル内のバッファーをオーバーフローしますが、コードを見ずに言うのは難しいことです。

1つで複数のファイル記述子を送信することを検討しましたかcmsg(3)

于 2012-11-26T14:23:24.110 に答える