4

我们有一个 C++ 客户端/服务器应用程序,其中客户端从服务器检索和呈现 3D 内容。

我们的客户端经常与服务器断开连接(不到 1 分钟后超过 50% 的运行)recv失败并WSAGetLastError返回WSAECONNABORTED。但奇怪的是,这仅在以下情况下才会发生:

  • 客户端有一个 NVIDIA Quadro GPU(发生在具有不同版本 Quadro 的多台机器上)
  • 我们的应用程序使用 OpenGL 进行渲染

我们没有在具有另一个 GPU 的机器上看到这一点。切换到 Direct3D 进行渲染也会使断开连接消失。在通过 Windows 更新推送驱动程序更新后,在一台 Quadro 机器上,这种情况开始出现(不太常见,但每天仍不止一次)。恢复驱动程序有帮助。

服务器也失败recvWSAECONNRESET。根据这个答案,我们在服务器端做错了,我们确实做错了shutdown,然后立即close。但是由于服务器得到了WSAECONNRESET我会说客户端首先强制断开连接,所以问题不是由服务器执行错误关闭引发的。

从长远来看,我们可能会修复服务器shutdown+close问题,但我们需要一些短期解决方法或解释 Quadros 上的行为。也许这是一个驱动程序错误,它以某种方式与 Winsock 交互,即使它听起来很古怪。

我是对的,服务器WSAECONNRESET意味着客户端首先断开连接吗?

关于如何解决 GPU 驱动程序可能导致套接字的潜在奇怪错误的任何想法?当然,我不希望为我们奇怪的问题提供具体的解决方案,但任何想法都可以。

4

1 回答 1

1

客户端是否有可能在接收缓冲区中未读数据的情况下发出关闭/关闭?这将中止连接。

于 2012-04-10T09:36:30.590 回答