以下の簡略化されたスニペットでは、クエリが結果を返す場合、すべて問題ありません。
クエリが結果を返さない場合でも、すべてが期待どおりに進み、例外がスローされてキャッチされます。
このクエリの後、さらに別のクエリを実行しようとすると、ステートメント
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 です。