4

クライアントがサーバーから 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 ドライバーがソケットに引き起こす潜在的な奇妙なバグをトラブルシューティングする方法についてのアイデアはありますか? もちろん、私たちの奇妙な問題に特定の解決策があるとは思っていませんが、どんなアイデアでも解決できます。

4

1 に答える 1

1

未読データが受信バッファに残っている状態で、クライアントがクローズ/シャットダウンを発行している可能性はありますか? これにより、接続が中止されます。

于 2012-04-10T09:36:30.590 に答える