2011-11-22 73 views
1

在我的C++应用程序中,我在循环中使用了recv函数。 我想通过从recv函数获取负值来识别网络连接问题。winsock - recv - 网络连接问题

我在测试中看到的一件事是,当我下网线时,我可以等待〜分钟,直到我看到我的应用程序得到了这个负值。

你知道C++代码知道网络连接问题发生的持续时间是多少?我可以管理这个时间吗?

+0

当你得到'负值'时,你也会得到* errno,*你应该检查。 – EJP

回答

0

在TCP-only级别上没有这样做的理由。这个选项是SO_KEEPALIVE,但它很没用。

实现应用程序级别的心跳,并在指定时间内没有收到数据或心跳(这几乎假定为非阻塞模式或至少一个带有超时的循环)时将套接字标记为断开连接。

0

它与C++代码无关。它与你正在使用的特定网络协议有关。假设它是TCP,它基本上是永久的。一个空闲的TCP连接没有与其关联的数据包,并且可能永远不会检测到连接丢失。

如果要检测特定接口的丢失,请使用您的平台的接口状态监视功能。