クライアントがサーバーから 3D コンテンツを取得してレンダリングする C++ クライアント/サーバー アプリケーションがあります。
私たちのクライアントはサーバーから非常に頻繁に切断され (実行の 50% 以上が 1 分未満で実行されます)、recv
失敗してWSAGetLastError
返されWSAECONNABORTED
ます。しかし、奇妙なことに、これは次の場合にのみ発生します。
- クライアントに NVIDIA Quadro GPU が搭載されている (さまざまなバージョンの Quadro を搭載した複数のマシンで発生)
- 私たちのアプリケーションはレンダリングにOpenGLを使用しています
これは、別の GPU を搭載したマシンでは見られませんでした。レンダリングを Direct3D に切り替えると、切断もなくなります。1 台の Quadro マシンで、ドライバーの更新が Windows Update を通じてプッシュされた後、この問題が発生し始めました (頻度は減りましたが、1 日に 1 回以上)。ドライバーを元に戻すことが役に立ちました。
サーバーも で失敗しrecv
ますWSAECONNRESET
。この回答によると、サーバー側で間違ったことをしています。実際に行ってshutdown
からすぐにclose
. しかし、サーバーが取得WSAECONNRESET
されるため、クライアントが最初に強制的に切断されるため、サーバーが不適切なクローズを行うことによって問題が発生することはありません。
長期的にはおそらくサーバーと問題を修正しますshutdown
が、Quadros での動作に関する短期的な回避策または説明が必要です。close
非常に風変わりに聞こえますが、Winsock と相互作用するのはドライバーのバグかもしれません。
サーバーWSAECONNRESET
がクライアントが最初に切断されたことを意味するのは正しいですか?
GPU ドライバーがソケットに引き起こす潜在的な奇妙なバグをトラブルシューティングする方法についてのアイデアはありますか? もちろん、私たちの奇妙な問題に特定の解決策があるとは思っていませんが、どんなアイデアでも解決できます。