winsock - 如何调查仅在配备 NVIDIA Quadro 的机器上经常发生的客户端 WSAECONNABORTED?

标签 winsock nvidia

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

我们的客户端经常与服务器断开连接(不到 1 分钟后超过 50% 的运行)与 recv失败和 WSAGetLastError返回 WSAECONNABORTED .但奇怪的是,这只发生在:

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

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

    服务器也出现故障 recvWSAECONNRESET .根据 this answer我们在服务器端做错了,我们确实做错了shutdown然后立即close .但是由于服务器得到 WSAECONNRESET我会说客户端首先强行断开连接,因此问题不是由服务器关闭错误引起的。

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

    我对那个服务器WSAECONNRESET意味着客户端先断开连接?

    关于如何解决 GPU 驱动程序可能导致套接字的潜在奇怪错误的任何想法? 当然,我不期望针对我们奇怪的问题有特定的解决方案,但任何想法都可以。

    最佳答案

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

    关于winsock - 如何调查仅在配备 NVIDIA Quadro 的机器上经常发生的客户端 WSAECONNABORTED?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3369913/

    相关文章:

    c++ - Windows 上套接字号的 PID?

    c++ - WSACleanup 和 atExit

    c++ - 如何使用 Nsight 调试 (GLSL) 着色器?

    CUDA 线程、SMX、SP 和 block ,它们是如何工作的?

    opengl - 修复 Nvidia 和 AMD 的 GLSL 着色器

    c++ - 如何同时支持 IPv4 和 IPv6 连接

    c++ - 使用套接字发送文件

    java - 在Java中使用Winsock "send"函数(或类似函数)

    python - 如何使用 NVIDIA 驱动程序/CUDA(支持tensorflow-gpu)和带有 pip 的 Python3 为图像制作 Dockerfile?

    tensorflow - nvidia-smi 的输出中 'Off' 是什么意思?