0

外部ハードウェアデバイスとソケットを介してオーディオデータを交換するDelphi6アプリケーションがあります。ハードウェアデバイスには内部的な問題があり、特に長期間の使用中に内部バッファ処理が遅くなることがあり、厄介な遅延がオーディオストリームに忍び寄ります。音声データは人と人との双方向のリアルタイム会話の根底にあることが多いため、これは重大な問題です。ただし、接続を切断して再確立すると、問題は解決します。

Indyでソケットを閉じる/切断する方法を知っています。これは非常に簡単です。私の懸念は、再接続を早すぎると、Indyの接続キャッシュメカニズムまたはWindowsソケットレイヤー自体が切断作業を無効にする可能性があることです。外部ハードウェアデバイスとのソケット接続が本当に切断されていることを確認する方法はありますか?より良い質問ですが、私の再接続の試みが、古いソケット接続を再利用するのではなく、新しい新しいソケット(ハンドル?)の作成を強制することを確認する方法はありますか?

外部ハードウェアデバイスは、新しい接続が作成された場合にのみ「リセット」されます。これは、おそらく内部キューをフラッシュして新しく開始するためです(デバイスのソースコードがないため、私の側では推測です)。

4

1 に答える 1

3

Indyは、すぐに再接続することを妨げません。Windowsがこれを行うのは、クライアントが毎回バインドするために同じローカルポートを割り当てている場合のみです。その場合、Windowsが再利用のためにそのポートを解放するのを待つ必要があります。ソケットのlingerオプションを手動で設定して、Windowsの遅延を無効にし、すぐに解放することができます。または、ローカルポートを割り当てないでください。ランダムなポートが、各(再)接続で使用されます。

于 2012-06-07T01:15:36.340 に答える