From 317eda1a0f2b31be43624cf0fecfc35fdcdc99eb Mon Sep 17 00:00:00 2001 From: Rinat Ibragimov Date: Sun, 18 Jan 2015 21:15:16 +0300 Subject: [PATCH] async_network: skip resolution of already resolved addresses --- src/async_network.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/async_network.c b/src/async_network.c index a9b12c6..6f879ad 100644 --- a/src/async_network.c +++ b/src/async_network.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -256,6 +257,16 @@ void handle_tcp_connect_stage1(struct async_network_task_s *task) { struct evdns_request *req; + struct sockaddr_in sai; + + memset(&sai, 0, sizeof(sai)); + if (inet_pton(AF_INET, task->host, &sai.sin_addr) == 1) { + // already a valid IP address + handle_tcp_connect_stage2(DNS_ERR_NONE, DNS_IPv4_A, 1, 300, &sai.sin_addr, task); + return; + } + + // queue DNS request req = evdns_base_resolve_ipv4(evdns_b, task->host, DNS_QUERY_NO_SEARCH, handle_tcp_connect_stage2, task); // TODO: what about ipv6? -- 2.2.1