異常な状況が発生しました。TCP実装が部分的に壊れている組み込みシステムと通信する必要がある組み込み状況(Intelボックス、現在2.6.20カーネルを使用)でLinuxシステムを使用しています。私が今知る限り、彼らは私たちからの各メッセージが別々のイーサネットフレームで届くことを期待しています!メッセージがイーサネットフレームに分割されると、問題が発生するようです。
私たちはデバイスとローカルネットワーク上にあり、私たちの間にルーターはありません(スイッチだけです)。
もちろん、私たちは彼らに彼らのシステムを修正するように強制しようとしていますが、それは実現可能ではないかもしれません。
ソケットにTCP_NODELAYを設定しました(接続します)が、一度に複数のメッセージを送信しようとしない場合にのみ役立ちます。複数の送信メッセージが連続している場合、それらのメッセージは1つまたは2つのイーサネットフレームで終わる傾向があり、他のシステムで問題が発生します。
通常、タイマーを使用してメッセージを近づけすぎないようにすることで問題を回避できますが、それによってスループットが明らかに制限されます。さらに、時間を短くしすぎると、ネットワークの輻輳がパケット送信を保留し、複数のメッセージを同じパケットに入れてしまうリスクがあります。
ドライバーにデータがキューに入れられているかどうかを確認する方法はありますか?ドライバーに独立したトランスポート層パケットで独立した書き込み呼び出しを送信させる方法はありますか?socket(7)とtcp(7)のマニュアルページを調べましたが、何も見つかりませんでした。何を探しているのかわからないのかもしれません。
明らかに、UDPは一方通行ですが、繰り返しになりますが、現時点では、もう一方の端に大きな変更を加えることはできないと思います。
どんな助けでも大歓迎です。