2013-03-27 62 views
1
  • 如今,在简单的代码片段如下,如果我的查询返回的结果, 一切正常。查询后MongoDB的插座不同的是不返回任何结果

  • 如果查询返回没有结果,那么所有东西仍然如预期的那样, 异常被抛出并被捕获。

  • 此查询后,如果我尝试执行另一个查询时, 声明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。蒙戈守护进程运行正常,并没有什么不寻常的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。

回答

0

我假设你获取和初始化连接别的地方在你的代码,希望避免获取每次你需要它的时候这方面的开销。 (我最初在我的代码中也是这样做的)。

我想你会发现,移动连接收购使用ScopedDbConnection并获得由司机会顺水推舟建立新的连接更紧密;司机似乎足够管理连接。

相关问题