+++ /dev/null
-diff -ru b/ldns/ldns.h a/ldns/ldns.h
---- b/ldns/ldns.h 2011-03-24 20:32:30.000000000 -0500
-+++ a/ldns/ldns.h 2011-03-24 20:29:03.000000000 -0500
-@@ -148,6 +148,16 @@
- /** EDNS flags */
- extern ldns_lookup_table ldns_edns_flags[];
-
-+
-+#ifdef USE_WINSOCK
-+#define SOCK_INVALID INVALID_SOCKET
-+#define close_socket(_s) if (_s > SOCK_INVALID) {closesocket(_s); _s = SOCK_INVALID;}
-+#else
-+#define SOCK_INVALID -1
-+#define close_socket(_s) if (_s > SOCK_INVALID) {close(_s); _s = SOCK_INVALID;}
-+#endif
-+
-+
- #ifdef __cplusplus
- }
- #endif
-diff -ru b/net.c a/net.c
---- b/net.c 2011-02-11 10:50:46.000000000 -0600
-+++ a/net.c 2011-03-24 20:28:15.000000000 -0500
-@@ -261,12 +261,18 @@
- #endif
- }
-
-+#ifndef WIN32
-+#include <poll.h>
-+#endif
-+
- /** wait for a socket to become ready */
- static int
- ldns_sock_wait(int sockfd, struct timeval timeout, int write)
- {
-- fd_set fds;
- int ret;
-+
-+#ifdef WIN32
-+ fd_set fds;
- #ifndef S_SPLINT_S
- FD_ZERO(&fds);
- FD_SET(FD_SET_T sockfd, &fds);
-@@ -275,6 +281,26 @@
- ret = select(sockfd+1, NULL, &fds, NULL, &timeout);
- else
- ret = select(sockfd+1, &fds, NULL, NULL, &timeout);
-+#else
-+
-+ struct pollfd pfds[2];
-+ int x = 0;
-+
-+ memset(&pfds[0], 0, sizeof(pfds[0]) * 2);
-+
-+ pfds[0].fd = sockfd;
-+ pfds[0].events = POLLIN|POLLERR;
-+
-+ if (write) {
-+ pfds[0].events |= POLLOUT;
-+ }
-+
-+ ret = poll(pfds, 1, timeout.tv_sec * 1000 + timeout.tv_usec / 1000);
-+
-+#endif
-+
-+
-+
- if(ret == 0)
- /* timeout expired */
- return 0;
-@@ -299,11 +325,7 @@
-
- /* wait for an response*/
- if(!ldns_sock_wait(sockfd, timeout, 0)) {
--#ifndef USE_WINSOCK
-- close(sockfd);
--#else
-- closesocket(sockfd);
--#endif
-+ close_socket(sockfd);
- return LDNS_STATUS_NETWORK_ERR;
- }
-
-@@ -313,11 +335,7 @@
- ldns_sock_nonblock(sockfd);
-
- answer = ldns_udp_read_wire(sockfd, answer_size, NULL, NULL);
--#ifndef USE_WINSOCK
-- close(sockfd);
--#else
-- closesocket(sockfd);
--#endif
-+ close_socket(sockfd);
-
- if (*answer_size == 0) {
- /* oops */
-@@ -353,9 +371,10 @@
-
- if ((sockfd = socket((int)((struct sockaddr*)to)->sa_family, SOCK_DGRAM,
- IPPROTO_UDP))
-- == -1) {
-+ == SOCK_INVALID) {
- return 0;
- }
-+
- return sockfd;
- }
-
-@@ -366,20 +385,20 @@
- int sockfd;
-
- if ((sockfd = socket((int)((struct sockaddr*)to)->sa_family, SOCK_STREAM,
-- IPPROTO_TCP)) == -1) {
-+ IPPROTO_TCP)) == SOCK_INVALID) {
- return 0;
- }
-
- /* perform nonblocking connect, to be able to wait with select() */
- ldns_sock_nonblock(sockfd);
-- if (connect(sockfd, (struct sockaddr*)to, tolen) == -1) {
-+ if (connect(sockfd, (struct sockaddr*)to, tolen) == SOCK_INVALID) {
- #ifndef USE_WINSOCK
- #ifdef EINPROGRESS
- if(errno != EINPROGRESS) {
- #else
- if(1) {
- #endif
-- close(sockfd);
-+ close_socket(sockfd);
- return 0;
- }
- #else /* USE_WINSOCK */
-@@ -398,11 +417,7 @@
- socklen_t len = (socklen_t)sizeof(error);
-
- if(!ldns_sock_wait(sockfd, timeout, 1)) {
--#ifndef USE_WINSOCK
-- close(sockfd);
--#else
-- closesocket(sockfd);
--#endif
-+ close_socket(sockfd);
- return 0;
- }
-
-@@ -421,7 +436,7 @@
- continue; /* try again */
- #endif
- else if(error != 0) {
-- close(sockfd);
-+ close_socket(sockfd);
- /* error in errno for our user */
- errno = error;
- return 0;
-@@ -645,11 +660,7 @@
- }
-
- answer = ldns_tcp_read_wire_timeout(sockfd, answer_size, timeout);
--#ifndef USE_WINSOCK
-- close(sockfd);
--#else
-- closesocket(sockfd);
--#endif
-+ close_socket(sockfd);
-
- if (*answer_size == 0) {
- /* oops */
-@@ -782,7 +793,7 @@
- * @hostname is used */
- for (ns_i = 0;
- ns_i < ldns_resolver_nameserver_count(resolver) &&
-- resolver->_socket == 0;
-+ resolver->_socket == SOCK_INVALID;
- ns_i++) {
- ns = ldns_rdf2native_sockaddr_storage(
- resolver->_nameservers[ns_i],
-@@ -792,7 +803,7 @@
- ldns_resolver_timeout(resolver));
- }
-
-- if (resolver->_socket == 0) {
-+ if (resolver->_socket == SOCK_INVALID) {
- ldns_pkt_free(query);
- LDNS_FREE(ns);
- return LDNS_STATUS_NETWORK_ERR;
-@@ -807,13 +818,7 @@
- if (status != LDNS_STATUS_OK) {
- /* RoRi: to prevent problems on subsequent calls to ldns_axfr_start
- we have to close the socket here! */
--#ifndef USE_WINSOCK
-- close(resolver->_socket);
--#else
-- closesocket(resolver->_socket);
--#endif
-- resolver->_socket = 0;
--
-+ close_socket(resolver->_socket);
- return LDNS_STATUS_CRYPTO_TSIG_ERR;
- }
- }
-@@ -826,12 +831,8 @@
- if(!query_wire) {
- ldns_pkt_free(query);
- LDNS_FREE(ns);
--#ifndef USE_WINSOCK
-- close(resolver->_socket);
--#else
-- closesocket(resolver->_socket);
--#endif
-- resolver->_socket = 0;
-+
-+ close_socket(resolver->_socket);
-
- return LDNS_STATUS_MEM_ERR;
- }
-@@ -843,12 +844,8 @@
-
- /* RoRi: to prevent problems on subsequent calls to ldns_axfr_start
- we have to close the socket here! */
--#ifndef USE_WINSOCK
-- close(resolver->_socket);
--#else
-- closesocket(resolver->_socket);
--#endif
-- resolver->_socket = 0;
-+
-+ close_socket(resolver->_socket);
-
- return status;
- }
-@@ -862,12 +859,8 @@
- /* RoRi: to prevent problems on subsequent calls to ldns_axfr_start
- we have to close the socket here! */
-
--#ifndef USE_WINSOCK
-- close(resolver->_socket);
--#else
-- closesocket(resolver->_socket);
--#endif
-- resolver->_socket = 0;
-+
-+ close_socket(resolver->_socket);
-
- return LDNS_STATUS_NETWORK_ERR;
- }
-diff -ru b/resolver.c a/resolver.c
---- b/resolver.c 2010-12-14 08:41:38.000000000 -0600
-+++ a/resolver.c 2011-03-24 20:07:17.000000000 -0500
-@@ -627,9 +627,7 @@
- r->_timeout.tv_sec = LDNS_DEFAULT_TIMEOUT_SEC;
- r->_timeout.tv_usec = LDNS_DEFAULT_TIMEOUT_USEC;
-
-- /* TODO: fd=0 is actually a valid socket (stdin),
-- replace with -1 */
-- r->_socket = 0;
-+ r->_socket = -1;
- r->_axfr_soa_count = 0;
- r->_axfr_i = 0;
- r->_cur_axfr_pkt = NULL;
-@@ -903,6 +901,8 @@
- size_t i;
-
- if (res) {
-+ close_socket(res->_socket);
-+
- if (res->_searchlist) {
- for (i = 0; i < ldns_resolver_searchlist_count(res); i++) {
- ldns_rdf_deep_free(res->_searchlist[i]);
-@@ -1198,7 +1198,7 @@
- ldns_status status;
-
- /* check if start() has been called */
-- if (!resolver || resolver->_socket == 0) {
-+ if (!resolver || resolver->_socket == -1) {
- return NULL;
- }
-
-@@ -1215,12 +1215,9 @@
- if (ldns_rr_get_type(cur_rr) == LDNS_RR_TYPE_SOA) {
- resolver->_axfr_soa_count++;
- if (resolver->_axfr_soa_count >= 2) {
--#ifndef USE_WINSOCK
-- close(resolver->_socket);
--#else
-- closesocket(resolver->_socket);
--#endif
-- resolver->_socket = 0;
-+
-+ close_socket(resolver->_socket);
-+
- ldns_pkt_free(resolver->_cur_axfr_pkt);
- resolver->_cur_axfr_pkt = NULL;
- }
-@@ -1243,12 +1240,8 @@
- /* RoRi: we must now also close the socket, otherwise subsequent uses of the
- same resolver structure will fail because the link is still open or
- in an undefined state */
--#ifndef USE_WINSOCK
-- close(resolver->_socket);
--#else
-- closesocket(resolver->_socket);
--#endif
-- resolver->_socket = 0;
-+
-+ close_socket(resolver->_socket);
-
- return NULL;
- } else if (ldns_pkt_get_rcode(resolver->_cur_axfr_pkt) != 0) {
-@@ -1258,12 +1251,8 @@
- /* RoRi: we must now also close the socket, otherwise subsequent uses of the
- same resolver structure will fail because the link is still open or
- in an undefined state */
--#ifndef USE_WINSOCK
-- close(resolver->_socket);
--#else
-- closesocket(resolver->_socket);
--#endif
-- resolver->_socket = 0;
-+
-+ close_socket(resolver->_socket);
-
- return NULL;
- } else {