现在,在下面的简化代码段中,如果我的查询返回结果,则一切正常。
如果查询没有返回结果,那么一切仍然按预期进行,抛出并捕获异常。
在此查询之后,如果我尝试执行另一个查询,则该语句
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。