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