diff options
Diffstat (limited to 'src/examples/async_resolver/async_resolver.c')
-rw-r--r-- | src/examples/async_resolver/async_resolver.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/examples/async_resolver/async_resolver.c b/src/examples/async_resolver/async_resolver.c index 1a05236..8bd0b12 100644 --- a/src/examples/async_resolver/async_resolver.c +++ b/src/examples/async_resolver/async_resolver.c @@ -8,7 +8,8 @@ typedef struct mowgli_dns_query_t query; } dns_query; -static void resolve_cb(mowgli_dns_reply_t *reply, int reason, void *vptr) +static void +resolve_cb(mowgli_dns_reply_t *reply, int reason, void *vptr) { char buf[2048]; dns_query *dnsquery = vptr; @@ -17,6 +18,7 @@ static void resolve_cb(mowgli_dns_reply_t *reply, int reason, void *vptr) if (reply == NULL) { printf("Got null reply for %s\n", dnsquery->domain); + switch (reason) { case MOWGLI_DNS_RES_NXDOMAIN: @@ -29,6 +31,7 @@ static void resolve_cb(mowgli_dns_reply_t *reply, int reason, void *vptr) printf("Timed out\n"); break; } + goto end; } @@ -37,12 +40,12 @@ static void resolve_cb(mowgli_dns_reply_t *reply, int reason, void *vptr) if (reply->addr.addr.ss_family == AF_INET) { - const struct sockaddr_in *saddr = (const struct sockaddr_in *)&reply->addr.addr; + const struct sockaddr_in *saddr = (const struct sockaddr_in *) &reply->addr.addr; sockptr = &saddr->sin_addr; } else if (reply->addr.addr.ss_family == AF_INET6) { - const struct sockaddr_in6 *saddr = (const struct sockaddr_in6 *)&reply->addr.addr; + const struct sockaddr_in6 *saddr = (const struct sockaddr_in6 *) &reply->addr.addr; sockptr = &saddr->sin6_addr; } else @@ -59,7 +62,8 @@ end: mowgli_free(vptr); } -static void read_data(mowgli_eventloop_t *eventloop, mowgli_eventloop_io_t *io, mowgli_eventloop_io_dir_t dir, void *userdata) +static void +read_data(mowgli_eventloop_t *eventloop, mowgli_eventloop_io_t *io, mowgli_eventloop_io_dir_t dir, void *userdata) { mowgli_eventloop_pollable_t *pollable = mowgli_eventloop_io_pollable(io); mowgli_dns_t *dns = userdata; @@ -76,11 +80,14 @@ static void read_data(mowgli_eventloop_t *eventloop, mowgli_eventloop_io_t *io, return; } else if (ret == 0) + { return; + } buf[--ret] = '\0'; ch = strtok(buf, " "); + while (ch != NULL) { dns_query *dnsquery = mowgli_alloc(sizeof(dns_query)); @@ -99,15 +106,15 @@ static void read_data(mowgli_eventloop_t *eventloop, mowgli_eventloop_io_t *io, void *addrptr; struct sockaddr_storage addr; - if(strchr(++ch, ':') != NULL) + if (strchr(++ch, ':') != NULL) { - struct sockaddr_in6 *saddr = (struct sockaddr_in6 *)&addr; + struct sockaddr_in6 *saddr = (struct sockaddr_in6 *) &addr; type = AF_INET6; addrptr = &saddr->sin6_addr; } else { - struct sockaddr_in *saddr = (struct sockaddr_in *)&addr; + struct sockaddr_in *saddr = (struct sockaddr_in *) &addr; type = AF_INET; addrptr = &saddr->sin_addr; } @@ -127,18 +134,22 @@ static void read_data(mowgli_eventloop_t *eventloop, mowgli_eventloop_io_t *io, mowgli_dns_gethost_byaddr(dns, &addr, query); } else + { mowgli_dns_gethost_byname(dns, ch, query, MOWGLI_DNS_T_A); + } dnsquery->domain = mowgli_strdup(ch); ch = strtok(NULL, " "); } } -int main (void) +int +main(void) { mowgli_eventloop_t *evloop = mowgli_eventloop_create(); mowgli_dns_t *dns = mowgli_dns_create(evloop, MOWGLI_DNS_TYPE_ASYNC); mowgli_eventloop_pollable_t *stdin_pollable = mowgli_pollable_create(evloop, STDIN_FILENO, dns); + mowgli_pollable_set_nonblocking(stdin_pollable, true); mowgli_pollable_setselect(evloop, stdin_pollable, MOWGLI_EVENTLOOP_IO_READ, read_data); |