我们有一个 C++ 客户端/服务器应用程序,其中客户端从服务器检索和呈现 3D 内容。
我们的客户端经常与服务器断开连接(不到 1 分钟后超过 50% 的运行)与 recv
失败和 WSAGetLastError
返回 WSAECONNABORTED
.但奇怪的是,这只发生在:
我们没有在带有另一个 GPU 的机器上看到这一点。切换到 Direct3D 进行渲染也会使断开连接消失。在通过 Windows 更新推送驱动程序更新后,在一台 Quadro 机器上,这种情况开始出现(频率较低,但每天仍不止一次)。恢复驱动程序有帮助。
服务器也出现故障
recv
与 WSAECONNRESET
.根据 this answer我们在服务器端做错了,我们确实做错了shutdown
然后立即close
.但是由于服务器得到 WSAECONNRESET
我会说客户端首先强行断开连接,因此问题不是由服务器关闭错误引起的。我们可能会修复服务器
shutdown
+ close
长期存在问题,但我们想要一些短期解决方法或对 Quadros 行为的解释。也许这是一个以某种方式与 Winsock 交互的驱动程序错误,尽管这听起来很古怪。我对那个服务器
WSAECONNRESET
意味着客户端先断开连接? 关于如何解决 GPU 驱动程序可能导致套接字的潜在奇怪错误的任何想法? 当然,我不期望针对我们奇怪的问题有特定的解决方案,但任何想法都可以。
最佳答案
客户端是否有可能在接收缓冲区中仍然存在未读数据的情况下发出关闭/关闭命令?这将中止连接。
关于winsock - 如何调查仅在配备 NVIDIA Quadro 的机器上经常发生的客户端 WSAECONNABORTED?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3369913/