检测到修复网关的连接丢失? (快速解决)

时间:2008-11-24 22:34:04

标签: c++ sockets connectivity quickfix fix-protocol

我正试图找到一种检测连接丢失的好方法。

我的适配器基于其中一个示例实现为Fix :: Application。它使用套接字启动器连接到修复网关。

当我拔掉互联网时,Fix :: Application的onLogout方法需要大约30秒才能被触发。似乎某些底层类会更早地意识到套接字存在问题。是否有一种快速的方法可以解决这个问题?

3 个答案:

答案 0 :(得分:4)

解决此问题的最佳方法可能是减少心跳间隔,以便更快地了解。我不知道任何消息导致TCP连接丢失,但我不认为QuickFix正在监听OS事件。虽然如果有这样的消息,它可能会流经fromAdmin事件。

您是否将问题发布到QuickFix DL?

答案 1 :(得分:2)

您正在使用的修复引擎可能在TCP断开连接时没有回调,或者回调onLogout以外的其他内容。 由于您正在使用修复程序,我猜它会因为错过心跳而强制注销。

快速的方法是查看代码并检查处理套接字关闭的位置,以及发生这种情况时执行的路径。

答案 2 :(得分:1)

TCP本身带有一个名为SO_KEEPALIVE的本机心跳机制。问题是此心跳的默认间隔可能高达2小时。这是在OS级别配置的。因此理论上你可以打开SO_KEEPALIVE,在操作系统级别配置一个合理的心跳间隔并且开心。但是,因为如上所述这是非常依赖操作系统的,大多数应用程序选择在应用程序级别实现心跳,并且FIX也不例外。减少您的FIX心跳间隔是这里的方法,特别是如果您依赖取消断开连接并且未检测到连接丢失的额外秒数可能导致不必要的订单执行。在任何修复引擎之上实现的FIX网关应该支持开箱即用的心跳配置。请查看CoralGateway的示例。 (免责声明:我是CoralGateway的开发者之一)