libevent 使用dns示例
时间: 2023-10-22 11:22:52 浏览: 86
以下是一个使用libevent进行DNS查询的示例代码:
```c
#include <event2/event.h>
#include <event2/dns.h>
#include <stdio.h>
void callback(int result, char type, int count, int ttl, void *addresses, void *arg) {
struct in_addr *addrs = addresses;
char buf[32];
int i;
if (result != DNS_ERR_NONE) {
printf("DNS lookup failed\n");
return;
}
for (i = 0; i < count; ++i) {
printf("%s\n", inet_ntop(AF_INET, &addrs[i], buf, sizeof(buf)));
}
}
int main(int argc, char **argv) {
struct event_base *base;
struct evdns_base *dns_base;
base = event_base_new();
dns_base = evdns_base_new(base, 1);
evdns_base_resolve_ipv4(dns_base, "www.google.com", 0, callback, NULL);
event_base_dispatch(base);
evdns_base_free(dns_base, 1);
event_base_free(base);
return 0;
}
```
该代码使用libevent创建了一个事件循环和一个DNS解析器,并使用`evdns_base_resolve_ipv4`函数异步查询`www.google.com`的IP地址。一旦查询完成,回调函数`callback`将被调用,打印出查询到的IP地址。最后,事件循环被启动并等待查询完成后退出。
阅读全文