]> arthur.barton.de Git - netatalk.git/blobdiff - libevent/sample/dns-example.c
Merge product-2-2
[netatalk.git] / libevent / sample / dns-example.c
index 5531821576a746a9d56e5c0cdf2fd16c2f4a2ec1..f97a0c6bab31833a5240afe093c5a1229ba52d24 100644 (file)
@@ -7,6 +7,9 @@
 
 #include <event2/event-config.h>
 
+/* Compatibility for possible missing IPv6 declarations */
+#include "../ipv6-internal.h"
+
 #include <sys/types.h>
 
 #ifdef WIN32
@@ -69,7 +72,6 @@ static void
 gai_callback(int err, struct evutil_addrinfo *ai, void *arg)
 {
        const char *name = arg;
-       struct evutil_addrinfo *ai_first = NULL;
        int i;
        if (err) {
                printf("%s: %s\n", name, evutil_gai_strerror(err));
@@ -92,8 +94,6 @@ gai_callback(int err, struct evutil_addrinfo *ai, void *arg)
                        printf("[%d] %s: %s\n",i,name,buf);
                }
        }
-       if (ai_first)
-               evutil_freeaddrinfo(ai_first);
 }
 
 static void
@@ -117,6 +117,8 @@ evdns_server_callback(struct evdns_server_request *req, void *data)
                        printf(" -- replying for %s (PTR)\n", req->questions[i]->name);
                        r = evdns_server_request_add_ptr_reply(req, NULL, req->questions[i]->name,
                                                                                        "foo.bar.example.com", 10);
+                       if (r<0)
+                               printf("ugh, no luck");
                } else {
                        printf(" -- skipping %s [%d %d]\n", req->questions[i]->name,
                                   req->questions[i]->type, req->questions[i]->dns_question_class);
@@ -163,6 +165,13 @@ main(int c, char **v) {
                ++idx;
        }
 
+#ifdef WIN32
+       {
+               WSADATA WSAData;
+               WSAStartup(0x101, &WSAData);
+       }
+#endif
+
        event_base = event_base_new();
        evdns_base = evdns_base_new(event_base, 0);
        evdns_set_log_fn(logfn);
@@ -171,6 +180,10 @@ main(int c, char **v) {
                evutil_socket_t sock;
                struct sockaddr_in my_addr;
                sock = socket(PF_INET, SOCK_DGRAM, 0);
+               if (sock == -1) {
+                       perror("socket");
+                       exit(1);
+               }
                evutil_make_socket_nonblocking(sock);
                my_addr.sin_family = AF_INET;
                my_addr.sin_port = htons(10053);
@@ -182,12 +195,17 @@ main(int c, char **v) {
                evdns_add_server_port_with_base(event_base, sock, 0, evdns_server_callback, NULL);
        }
        if (idx < c) {
+               int res;
 #ifdef WIN32
-               evdns_base_config_windows_nameservers(evdns_base);
+               res = evdns_base_config_windows_nameservers(evdns_base);
 #else
-               evdns_base_resolv_conf_parse(evdns_base, DNS_OPTION_NAMESERVERS,
+               res = evdns_base_resolv_conf_parse(evdns_base, DNS_OPTION_NAMESERVERS,
                    "/etc/resolv.conf");
 #endif
+               if (res < 0) {
+                       fprintf(stderr, "Couldn't configure nameservers");
+                       return 1;
+               }
        }
 
        printf("EVUTIL_AI_CANONNAME in example = %d\n", EVUTIL_AI_CANONNAME);