注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[libevent] evdns.h(1) ---- simple lookup  

2010-02-02 08:26:01|  分类: net_libevent |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
话说 glibc 已经开始支持异步dns查询,不过 getaddrinfo_a 在 FreeBSD 8.0 上还没有。
http://people.redhat.com/drepper/asynchnl.pdf

libevent 自带了 async-dns 的实现,对于用 libevent 作为 event-dispatch 框架的程序,还是很实用的。
下面是最简单的用法。
-----------------------------------------------------
#include <netinet/in.h>
#include <arpa/inet.h>
#include <event.h>
#include <evdns.h>
#include <stdio.h>

void dns_callback(int result, char type, int count,
        int ttl, void *addresses, void *arg)
{
    int i;

    if ( result != DNS_ERR_NONE )
    {
        fprintf(stderr, "dns lookup fail = %d\n", result);
        return;
    }

    printf("ttl = %d\n", ttl);
    for ( i = 0; i < count; i++ )
    {
        printf("addr = %s\n", inet_ntoa(((struct in_addr*)addresses)[i]));
    }
}

int main(int argc, char *argv[])
{
    if ( argc != 2 )
    {
        printf("usage: %s <hostname>\n", argv[0]);
        return 1;
    }

    event_init();
    evdns_init();

    evdns_resolv_conf_parse(DNS_OPTIONS_ALL, "/etc/resolv.conf");
    evdns_resolve_ipv4(argv[1], 0, dns_callback, NULL);

    event_dispatch();
    evdns_shutdown(0);
}
-----------------------------------------------------
$ ./a.out www.g.cn
ttl = 270
addr = 203.208.39.99
addr = 203.208.39.104
addr = 203.208.39.160
-----------------------------------------------------
  评论这张
 
阅读(1144)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017