winsock - recv - 网络连接问题
问题描述:
在我的C++应用程序中,我在循环中使用了recv
函数。 我想通过从recv函数获取负值来识别网络连接问题。winsock - recv - 网络连接问题
我在测试中看到的一件事是,当我下网线时,我可以等待〜分钟,直到我看到我的应用程序得到了这个负值。
你知道C++代码知道网络连接问题发生的持续时间是多少?我可以管理这个时间吗?
答
在TCP-only级别上没有这样做的理由。这个选项是SO_KEEPALIVE
,但它很没用。
实现应用程序级别的心跳,并在指定时间内没有收到数据或心跳(这几乎假定为非阻塞模式或至少一个带有超时的循环)时将套接字标记为断开连接。
答
它与C++代码无关。它与你正在使用的特定网络协议有关。假设它是TCP,它基本上是永久的。一个空闲的TCP连接没有与其关联的数据包,并且可能永远不会检测到连接丢失。
如果要检测特定接口的丢失,请使用您的平台的接口状态监视功能。
当你得到'负值'时,你也会得到* errno,*你应该检查。 – EJP