物理断开与网络和间歇性套接字错误10057

时间:2015-05-07 21:39:08

标签: sockets winsock

我的客户有一个Windows应用程序,两台机器之间有网络连接。系统应该处理丢失的连接。它通过在每次从服务器接收数据时重置的客户端位置保持计数器来实现此目的。如果计数器达到60秒(即我们没有从服务器听到60秒),它会执行一些预期的操作来应对连接丢失。

然而,客户遇到问题,有时连接会丢失但客户端没有执行预期的操作。经过调查,这似乎是由客户端到服务器的套接字引起的间歇性问题,当连接丢失时,有时会引发错误10057(WSAENOTCONN /"套接字未连接")。因为客户端在收到套接字错误时行为不同,所以客户在收到此套接字错误时无法获得所需的行为。这对我来说并不难解决,但我对这种不同的行为感到有些困惑。

为了重现这个问题,我将网络电缆从服务器机器背面拉出来。在大多数情况下,对客户端的影响是我们只是没有通过套接字获取任何数据,我们也没有收到错误。然而,有一小部分时间会引发错误10057。任何人都可以解释为什么会出现这种不一致的情况?客户端套接字是非阻塞STREAM套接字。

2 个答案:

答案 0 :(得分:1)

我希望你只有在尝试发送内容时才会收到错误。也就是说TCP连接会发现它无法到达另一个端点。这将花费不同的时间来发现故障,具体取决于网络往返时间。可能存在“保持活动”选项,即使应用程序处于空闲状态,也会强制套接字定期发送内容以检测故障。

答案 1 :(得分:1)

WSAENOTCONN是您应用中的错误。这不是连接丢失的结果。连接丢失的结果是WSAECONNRESET.您的代码必须已WSAECONNRESET,,然后继续使用连接,就好像它仍然有效一样。 然后您获得WSAENOTCONN.