TCPソケット(インターネットドメイン)に基づいたクライアントサーバープログラムを設計およびテストしています。現在、ローカルマシンでテストしていますが、SIGPIPEについて次のことを理解できません。
*。SIGPIPEはかなりランダムに表示されます。それは決定論的である可能性がありますか?
最初のテストでは、クライアントからの単一のsmall(25文字)送信操作と、それに対応するサーバーでの受信が行われました。同じマシン上で同じコードが正常に実行されるかどうか(SIGPIPE)は完全に私の制御不能です。故障率は約45%(かなり高い)です。それで、これを最小限に抑えるために、何らかの方法でマシンを調整できますか?
**。2回目のテストでは、クライアントからサーバーに40000個の小さい(25文字)メッセージ(合計データ1MB)を送信し、サーバーが実際に受信したデータの合計サイズで応答しました。クライアントはタイトループでデータを送信し、サーバーで単一の受信呼び出しがあります。これは、送信された合計データの最大1200バイトに対してのみ機能します。また、これらの非決定論的なSIGPIPEがあり、現在は約70%です(本当に悪い)。
誰かが私のデザインの改善を提案できますか(おそらくそれはサーバーにあります)。要件は、サーバーへの単一のソケット接続が確立された後、クライアントが中程度から非常に大量のデータ(メッセージごとに約25文字)を送信できることです。1つの受信に対して複数の送信を行うと、常に損失が大きくなり、非常に非効率になると感じています。メッセージを組み合わせて、1つのsend()操作のみで送信しますか。それが唯一の道ですか?