c-ares 一个C语言的异步DNS解析库
2015-07-31 08:10
1276 查看
c-ares是一个C语言的异步DNS解析库,可以很方便的和使用者的事件循环统一起来,实现DNS的非
阻塞异步解析,libcurl, libevent, gevent, nodejs都在使用。
下面摘自Stack Overflow的一个例子,
如果有需要可以采用c-ares实现一个自己的DNS异步解析的Server,做成独立的dns解析服务
转载请注明出处~~谢谢
阻塞异步解析,libcurl, libevent, gevent, nodejs都在使用。
下面摘自Stack Overflow的一个例子,
#include <time.h> #include <iostream> #include <netdb.h> #include <arpa/inet.h> #include <ares.h> void dns_callback (void* arg, int status, int timeouts, struct hostent* host) //ares 处理完成,返回DNS解析的信息 { if(status == ARES_SUCCESS) std::cout << host->h_name << "\n"; else std::cout << "lookup failed: " << status << '\n'; } void main_loop(ares_channel &channel) { int nfds, count; fd_set readers, writers; timeval tv, *tvp; while (1) { FD_ZERO(&readers); FD_ZERO(&writers); nfds = ares_fds(channel, &readers, &writers); //获取ares channel使用的FD if (nfds == 0) break; tvp = ares_timeout(channel, NULL, &tv); count = select(nfds, &readers, &writers, NULL, tvp); //将ares的SOCKET FD 加入事件循环 ares_process(channel, &readers, &writers); // 有事件发生 交由ares 处理 } } int main(int argc, char **argv) { struct in_addr ip; int res; if(argc < 2 ) { std::cout << "usage: " << argv[0] << " ip.address\n"; return 1; } inet_aton(argv[1], &ip); ares_channel channel; // 创建一个ares_channel if((res = ares_init(&channel)) != ARES_SUCCESS) { // ares 对channel 进行初始化 std::cout << "ares feiled: " << res << '\n'; return 1; } ares_gethostbyaddr(channel, &ip, sizeof ip, AF_INET, dns_callback, NULL); //传递给c-ares channal 和 回调 main_loop(channel); //主程序事件循环 return 0; }
如果有需要可以采用c-ares实现一个自己的DNS异步解析的Server,做成独立的dns解析服务
转载请注明出处~~谢谢
相关文章推荐
- VC++ MFC 按钮的全部样式Style
- oc语言第七课 内存管理一——ios学习连载12
- C语言的历史
- 【C语言探索之旅】 第二部分第十课:练习题和习作
- 黑马程序员--学习C语言文件操作
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- C语言播放MP3音乐
- C++语言中随机数的使用
- leetcode_Power of Two_easy
- 将Python代码嵌入C++程序进行编写的实例
- Convert Sorted List to Binary Search Tree
- 《C++编程思想》 第七章 常 量 (原书代码+习题+解答)
- C++对象模型——Copy Constructor 的建构操作(第二章)
- c++ primer (5th) 第九章,顺序容器
- C++ 头文件相互包含的问题
- C语言面试题(二)
- C++ 11 理解lambda表达式
- c语言中文件相关操作
- c语言中文件相关操作
- C/C++ 常见面试题目 (一)