【发布时间】:2017-10-03 09:56:52
【问题描述】:
我的一个客户有一个 Windows 应用程序,其中两台机器之间有网络连接。该系统应该处理丢失的连接。它通过在客户端位置上保留一个计数器来做到这一点,每次从服务器接收到数据时都会重置该计数器。如果计数器达到 60 秒(即我们在 60 秒内没有收到服务器的消息),它会执行一些预期的操作来应对连接丢失。
但是,客户遇到了一个问题,有时连接会丢失,但客户没有执行预期的操作。经调查,这似乎是由客户端到服务器的套接字引起的间歇性问题,有时在连接丢失时会引发错误 10057 (WSAENOTCONN / "Socket is not connected")。由于客户端在收到套接字错误时的行为不同,因此客户在收到此套接字错误时不会获得所需的行为。这对我来说并不难解决,但我对不同的行为有点困惑。
为了重现该问题,我将网络电缆从服务器机器的背面拉出。大多数时候,对客户端的影响是我们没有通过套接字获得任何数据,也没有收到错误。但有时会出现错误 10057。谁能解释为什么会出现这种不一致?客户端套接字是一个非阻塞的 STREAM 套接字。
【问题讨论】: