在我的 C++ 应用程序中,我recv
在循环中使用该函数。我想通过从 recv 函数中获取负值来识别网络连接问题。
我在测试中可以看到的一件事是,当我断开网络电缆时,我可以等待 ~ 分钟,直到我看到我的应用程序得到了这个负值。
您知道 C++ 代码知道网络连接问题发生的持续时间是多少吗?我可以管理这个时间吗?
在我的 C++ 应用程序中,我recv
在循环中使用该函数。我想通过从 recv 函数中获取负值来识别网络连接问题。
我在测试中可以看到的一件事是,当我断开网络电缆时,我可以等待 ~ 分钟,直到我看到我的应用程序得到了这个负值。
您知道 C++ 代码知道网络连接问题发生的持续时间是多少吗?我可以管理这个时间吗?
它与 C++ 代码无关。它与您使用的特定网络协议有关。假设它是 TCP,它基本上是永远的。空闲的 TCP 连接没有与之关联的数据包,并且可能永远不会检测到连接丢失。
如果您想检测特定接口的丢失,请使用您平台的接口状态监控功能。
在仅 TCP 级别上没有明智的方法来执行此操作。用于此的选项是SO_KEEPALIVE
,但它非常没用。
实现应用程序级心跳并在指定时间内没有收到数据或心跳时标记套接字断开连接(这几乎假设非阻塞模式,或者至少是一个select(2)
超时循环)。