外部ハードウェアデバイスとソケットを介してオーディオデータを交換するDelphi6アプリケーションがあります。ハードウェアデバイスには内部的な問題があり、特に長期間の使用中に内部バッファ処理が遅くなることがあり、厄介な遅延がオーディオストリームに忍び寄ります。音声データは人と人との双方向のリアルタイム会話の根底にあることが多いため、これは重大な問題です。ただし、接続を切断して再確立すると、問題は解決します。
Indyでソケットを閉じる/切断する方法を知っています。これは非常に簡単です。私の懸念は、再接続を早すぎると、Indyの接続キャッシュメカニズムまたはWindowsソケットレイヤー自体が切断作業を無効にする可能性があることです。外部ハードウェアデバイスとのソケット接続が本当に切断されていることを確認する方法はありますか?より良い質問ですが、私の再接続の試みが、古いソケット接続を再利用するのではなく、新しい新しいソケット(ハンドル?)の作成を強制することを確認する方法はありますか?
外部ハードウェアデバイスは、新しい接続が作成された場合にのみ「リセット」されます。これは、おそらく内部キューをフラッシュして新しく開始するためです(デバイスのソースコードがないため、私の側では推測です)。