Delphi On Railsを使用するアプリケーションがあり、HTTP、JSON、Webソケットを使用してクライアントとして通信し、サーバとして機能します。最近いくつかの問題に遭遇しましたが、デバッグして問題の原因を見つけるのは難しいです。一部のHTTPリクエストで奇妙なTCPリセット(RST)
トラフィック分析にWiresharkを使用すると、次のような動作が発生する可能性があります。クライアントからのリクエスト(HTTP GETファイル)。通常は、そのリクエストを処理し、HTTPステータスコード、ファイル(キャッシュされていない場合)などを送信します。ただし、クライアントからの要求は 、サーバーからのTCP SYNのみですが、その後は再現可能な問題があります。サーバーはRSTパケットを送信し、TCP通信は停止します。
奇妙なことがある(RSTパケットは、通信が中断されたファイルは異なるが)、私たちは非常によく問題を再現することができ、それが神秘的に次のいずれかの場合に消滅:
- デバッグ環境では( DelphiのIDE)、madExceptPatch
- メインアプリケーションウィンドウとは別のウィンドウにフォーカスを与えると実行可能ファイルをパッチ適用ではない、リリース環境でmadExcept
- を無効にします。
我々は、DelphiでのRailsでいくつかの問題を抱えていたし、アクセス違反とデバッグ例外を回避するために、それに若干の変更をしなければならなかったように、私はあることをDORが犯人といくつかの奇妙なメモリ破損またはuncatched例外であることを疑いますバグですが、それはまだ混乱しています。特に焦点を変えれば、問題はなくなります。
私の主な質問は、この問題を解決する方法ではなく、デバッグする方法と問題を探す場所です。その場合、私たちはthe usual procedures that process requestsに入っていないので、DORや他の何か(アプリケーション、Winsock、OS)のように思われます。誤って接続をリセットします。 Issue #6、Issue #7、Issue #8、forum entry:それは関連するかもしれないよう
は完全を期すために、ここで私は、DelphiでのRailsプロジェクトと私は問題についてmadExceptの作者を尋ねたフォーラムのスレッドで報告された問題です。
これが役立つかどうかわかりませんが、Windowsでは、受け入れられていない接続のバックログが大きいリスニングソケットに接続がリセットされます。 「大きなバックログ」は特に明確に定義されていないが、妥当な数であると考えられている。 – cha0site
システムの問題、特に "変更されたフォーカス"について話しているときに、おそらくserverfaultに尋ねてみてください。 – pmod