#include "lib_acl.h" #ifndef WIN32 #include #endif #include #include "acl_cpp/stream/aio_handle.hpp" #include "acl_cpp/stdlib/dns_service.hpp" using namespace acl; static void usage(const char* procname) { printf("usage: %s -h[help] -t[use thread]\n", procname); } static int __ncount = 0; class dns_result : public dns_result_callback { public: dns_result(const char* domain) : dns_result_callback(domain) { } ~dns_result() { } virtual void destroy() { delete this; __ncount--; } virtual void on_result(const char* domain, const dns_res& res) { std::cout << "result: domain: " << domain; if (res.ips_.size() == 0) { std::cout << ": null" << std::endl; return; } std::cout << std::endl; std::list::const_iterator cit = res.ips_.begin(); for (; cit != res.ips_.end(); cit++) std::cout << "\t" << (*cit).c_str(); std::cout << std::endl; } }; int main(int argc, char* argv[]) { int ch, nthreads = 2; while ((ch = getopt(argc, argv, "ht:")) > 0) { switch (ch) { case 'h': usage(argv[0]); return (0); case 't': nthreads = atoi(optarg); break; default: break; } } acl_init(); aio_handle handle; const char* domain = "www.baidu.com"; dns_service* server = new dns_service(nthreads); // 使消息服务器监听 127.0.0.1 的地址 if (server->open(&handle) == false) { delete server; std::cout << "open server error!" << std::endl; getchar(); return (1); } dns_result* result = new dns_result(domain); server->lookup(result); __ncount++; result = new dns_result(domain); server->lookup(result); __ncount++; result = new dns_result(domain); server->lookup(result); __ncount++; domain = "www.sina.com"; result = new dns_result(domain); server->lookup(result); __ncount++; domain = "www.51iker.com"; result = new dns_result(domain); server->lookup(result); __ncount++; domain = "www.hexun.com"; result = new dns_result(domain); server->lookup(result); __ncount++; domain = "www.com.dummy"; result = new dns_result(domain); server->lookup(result); __ncount++; result = new dns_result(domain); server->lookup(result); __ncount++; result = new dns_result(domain); server->lookup(result); __ncount++; while (true) { if (handle.check() == false) { std::cout << "stop now!" << std::endl; break; } if (__ncount == 0) break; } delete server; handle.check(); std::cout << "server stopped!" << std::endl; getchar(); return (0); }