1
  • 以下の簡略化されたスニペットでは、クエリが結果を返す場合、すべて問題ありません。

  • クエリが結果を返さない場合でも、すべてが期待どおりに進み、例外がスローされてキャッチされます。

  • このクエリの後、さらに別のクエリを実行しようとすると、ステートメントdbConn->query(collection, queryObj)mongo::SocketException. 印刷されたメッセージは次のとおりです。

    socket exception [SEND_ERROR] for 127.0.0.1:27017 // 9001 socket exception [2] server [127.0.0.1:27017]

  • これ以降、次のクエリはすべて、異なるメッセージで同じ例外をスローします。 socket exception [FAILED_STATE] for localhost:27017 // 9001 socket exception [5] server [localhost:27017]

  • エラーコード文字列も出力しましたが、どちらも「不明なエラー」です。

  • プロセスを再起動するとリセットされるため、接続が何らかの形で破損していると想定しています。現在、共有 ptr にアクセスしている人は他にいません。mongo デーモンは正​​常に動作し、mongodb ログに異常はありません。

  • 私の大きな疑問は: なぜ起こるのか?

スニペット:

try
{
    // Some initialzation here..
    // dbConn is a boost::shared_ptr<mongo::DBClientConnection>

    std::auto_ptr<mongo::DBClientCursor> cursor = dbConn->query(collection, queryObj);
    if (!cursor->more())
    {
        throw Exception();
    }
}
catch(const Exception&)
{

}
catch(const mongo::SocketException& e)
{
    std::cout << ex.what() << "//" << ex.toString() << std::endl;
}

MongoDB C++ ドライバーのバージョンは 2.3.2 です。

4

1 に答える 1