我想在我的项目中使用mongodb c驱动程序,我在Windows 7上使用命令构建它:
scons --m32 --c99
我的问题是我无法使Connecting example工作:
#include <stdio.h>
#define MONGO_HAVE_STDINT
#include "mongo.h"
int main() {
mongo conn[1];
int status = mongo_client( conn, "127.0.0.1", 27017 );
printf("status %d, err %d", status, conn->err);
mongo_destroy( conn );
return 0;
}
mongod是否在我的机器上运行,执行exe的输出是:
$ ./mongodb_example.exe 状态-1,错误3
错误3
corresponds到MONGO_CONN_ADDR_FAIL错误代码(调用getaddrinfo()时出错。)
有关如何成功连接的任何建议吗?
更新:
mongodb-mongo-c-driver-v0.8.1-0-g8f27c0f
答案 0 :(得分:1)
如果您打印
,您可以了解mongo失败的确切原因 conn->errcode
conn->errstr
错误代码相当于linux中的errno
或Windows中的GetLastError
。
errstr将包含与字符串相同的内容。所以你会看到像getaddrinfo failed with error <the return status of getaddrinfo>
getaddrinfo可能在您的系统中失败的原因有多种。您可以从手册页man gai_strerror
获取这些值(errstr
应报告此内容)
EAI_AGAIN temporary failure in name resolution
EAI_BADFLAGS invalid value for ai_flags
EAI_BADHINTS invalid value for hints
EAI_FAIL non-recoverable failure in name resolution
EAI_FAMILY ai_family not supported
EAI_MEMORY memory allocation failure
EAI_NONAME hostname or servname not provided, or not known
EAI_OVERFLOW argument buffer overflow
EAI_PROTOCOL resolved protocol is unknown
EAI_SERVICE servname not supported for ai_socktype
EAI_SOCKTYPE ai_socktype not supported
EAI_SYSTEM system error returned in errno
答案 1 :(得分:1)
因此,要完成这项工作,您需要做两件事:
scons --m32 --standard-env
MONGO_HAVE_STDINT
之外,请确保在建立连接之前致电mongo_init_sockets()
。这在Windows上是必需的。 #include <stdio.h>
#define MONGO_HAVE_STDINT
#include "mongo.h"
int main() {
mongo_init_sockets();
mongo conn[1];
int status = mongo_client( conn, "192.168.2.7", 27017 );
printf("status %d, err %d", status, conn->err);
mongo_destroy( conn );
return 0;
}
所以第一部分用getaddrinfo()
解决了问题,&#34;标准环境&#34;中包含了一个实现。第二部分是必要的&#34; winsock&#34; Windows平台上需要的初始化。在测试文件中,这是使用定义的宏实现的。
还要确保您使用的是Python 2.7 32位(非64位)。不太确定当前scons
版本的有效性,但确定不会有任何损害。
有些内容存在于您可能错过的文档中here,以及API文档中对mongo_init_sockets()
函数的相当简单的描述。当然,查看发行版中的测试文件并没有受到伤害。
对我来说有点痛苦,因为我通常不在Windows上构建C程序。
答案 2 :(得分:0)
我还没有使用mongodb c驱动程序,所以这只是猜测。从教程中,您似乎跳过了初始化步骤:
http://api.mongodb.org/c/current/tutorial.html
mongo conn[1];
mongo_init( conn );
...
mongo_client( conn, "127.0.0.1", 27017 );