gloox中SRV lookup方式调用

gloox提供了srv record的解析,根据srv record解析,我们可以获得 server address 和 端口号,DNS server通过这种协议实现负载均衡之类的功能。

_xmpp-client._tcp.example.com

http://camaya.net/api/gloox-1.0/dns_8cpp-source.html

第一种:

gloox库在变编译的时候可以选择 ./configure --enable-getaddrinfo 来支持resolve srv的功能:

 void DNS::resolve( struct addrinfo** res, const std::string& service, const std::string& proto,
00222                      const std::string& domain, const LogSink& logInstance )

然而这个函数获得的 addrinfo结构体如果要解析出域名与端口的话可能需要花点心思。我的问题时alignment trap。这种方法暂且跳过。

第二种:

需要打开下面的几个宏,否则调用的resolve函数就是直接返回。根本不会做任何有意义的事情。

问题时怎么打开这几个宏???

#if defined( HAVE_RES_QUERYDOMAIN ) && defined( HAVE_DN_SKIPNAME ) && defined( HAVE_RES_QUERY )
00081   DNS::HostMap DNS::resolve( const std::string& service, const std::string& proto,
00082                              const std::string& domain, const LogSink& logInstance )

查了下configure,发现其中有关于这几个宏的定义

 
 
 
 
ac_ext =c
ac_cpp = '$CPP $CPPFLAGS'
ac_compile = '$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link = '$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu = $ac_cv_c_compiler_gnu
LIBS = "$PTHREAD_LIBS $LIBS"
CPPFLAGS = "$CPPFLAGS $PTHREAD_CFLAGS"
LDFLAGS = "$LDFLAGS $PTHREAD_CFLAGS"
for ac_func in res_querydomain
do :
  ac_fn_c_check_func "$LINENO" "res_querydomain" "ac_cv_func_res_querydomain"
if test "x$ac_cv_func_res_querydomain" = xyes; then :
  cat >>confdefs.h <<_ACEOF
#define HAVE_RES_QUERYDOMAIN 1
_ACEOF
fi
done

虽然搞不太懂,但是可以看到里面的

#define HAVE_RES_QUERYDOMAIN 1

这个宏定义,不懂其原理,连解决都不知道怎么下手,总之是要先检查系统中是否支持这个res_querydomain这个函数吧。

大家有没有知道的,告诉小弟一声啊。很急的。。。

2012-12-19 23:07

今天分析了下config.log 看到了里面的 checking res_querydomain        no

其中还有-lresolv的问题。

查了下-lresolv在交叉编译工具链中提供了,grep res_query发现也有这个函数,但是貌似gloox检查的时候没有找到这个函数,这个是configure的问题呢?还是我们的交叉工具链的lib的问题呢?

我通过写了一个小程序调用res_query,发现可以正常运行,并且测试结果同x86的相同,难道真的是configure出了问题?那我就惨了,完全没有思路,只能硬着头皮搞之前的那个第一种方案试试了。


看到有libidn 库,就搞过来了,看到里面的getaddrinfo这个函数的拓展之类的,觉得可能会有点帮助吧,但是编译--with-libidn=path-of-libidn --enable-getaddrinfo之后还是会出现所用函数为定义的现象,这是一个值得深思的问题!!!


来说说libidn看似其就是用来支持解析DNS SRV的,可是怎么用呢?

这是一个值得深思的问题,好久没给一个问题搞得这么头疼了。


------------------------------------------------------------------------

经过三天的折腾,发发现了问题所在,我每次修改的事lib,但是编的事app,lib并没有更新,所以不会游泳,现在把lib重编后,就ok了,使用res_querydomain函数,不过其中的map容器的限制需要修改为multimap。总的来说今天的事情算是大功告成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱国正

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值