我有一个Delphi 6应用程序,它通过套接字与外部硬件设备交换音频数据。硬件设备内部存在问题,有时其内部缓冲区处理速度变慢,特别是在长时间使用期间,并且令人讨厌的延迟蔓延到音频流中。这是一个重要问题,因为音频数据经常是人与人之间双向实时对话的基础。但是,断开连接并重新建立连接可以解决问题。
我知道如何用Indy关闭/断开套接字,这很容易。我担心的是,如果我尝试重新连接太快,Indy或Windows套接字层本身的某些连接缓存机制可能会破坏我的断开连接。有没有办法确保与外部硬件设备的套接字连接真的坏了?更好的问题,有没有办法确保我的重新连接尝试强制创建一个新的新套接字(句柄?)而不是重新使用旧的套接字连接?
如果创建了一个全新的连接,外部硬件设备只会“重置”,可能是因为它刷新了内部队列并重新启动(因为我没有设备的源代码,所以我的推测)。 p>
答案 0 :(得分:3)
Indy不会阻止您立即重新连接。 Windows将执行此操作的唯一时间是您为每次绑定客户端分配相同的本地端口。在这种情况下,您必须等待Windows释放该端口以便重复使用。您可以手动设置套接字的逗留选项以禁用Windows的延迟并立即释放。或者不分配本地端口,并且将在每个(重新)连接上使用随机端口。