Indy10で奇妙な問題が発生しており、TCPを使用して次々に送信する2つの大きな文字列(それぞれ数百文字)が、奇妙に絡み合って表示されています。これは非常にまれにしか発生しません。
各文字列はLFで終了する完全なXMLメッセージであり、通常、READプロセスはXMLメッセージ全体を読み取り、LFを検出すると戻ります。
実際にメッセージを送信するための呼び出しは、IOHandlerのwritelnメソッドへの呼び出しの周りのクリティカルセクションによって保護されているため、2つのスレッドが同時に送信することはできません。(クリティカルセクションが適切に実装/機能していることは確かです)。この問題はめったに発生しません。症状は奇妙です...文字列Aに続いて文字列Bを送信すると、もう一方の端で受信したもの(まれに障害が発生する場合)は、文字列Aの後続セクション自体です(つまり、、最後にLFがあります)、その後に文字列Aの先頭セクションが続き、次に文字列B全体の後に1つのLFが続きます。部分的な読み取りの後、「タイムアウト」プロパティがtrueではないことを確認しました。コンテンツを返すすべての読み取りの後にそのプロパティをログに記録します。また、LFを追加して送信する前に、文字列内のすべての英数字以外の文字をスペースに明示的に置き換えるため、文字列にLF文字が埋め込まれていないこともわかっています。
送信側と受信側の両方のクリティカルセクション内にログメカニズムがあるため、「ワイヤ」でこの動作を確認できます。
私たちは完全に困惑しており、この問題を引き起こす可能性のある低レベルのIndyの問題があるかどうか(常に最も可能性は低いですが)、たとえば、バッファが間違った順序で送信されている可能性があるかどうか疑問に思っています。問題ですが、私たちはストローを把握しています。
誰か明るいアイデアはありますか?