dirmngr,w32: Hack around a select problem.
authorWerner Koch <wk@gnupg.org>
Mon, 19 Dec 2016 15:37:50 +0000 (16:37 +0100)
committerWerner Koch <wk@gnupg.org>
Mon, 19 Dec 2016 15:39:17 +0000 (16:39 +0100)
* dirmngr/dns.c (FD_SETSIZE): Bump up to 1024.
(dns_poll): Return an error instead of hitting an assertion failure.
--

For unknown reasons socket() return fd with values 244, 252, 268.  The
latter is above the FD_SETSIZE of 256.  It seems that select has been
build with a highler FD_SETSIZE limit.  Bump up to a reasonable large
value.

A better solution would be to grab some code from npth_eselect to
replace select.  We could also use npth_eselect direclty in
dns-stuff.c instead of using dns_res_poll.

Signed-off-by: Werner Koch <wk@gnupg.org>
dirmngr/dns.c

index de7fa72..4b61b72 100644 (file)
@@ -50,7 +50,7 @@
 
 #if _WIN32
 #ifndef FD_SETSIZE
-#define FD_SETSIZE 256
+#define FD_SETSIZE 1024
 #endif
 #include <winsock2.h>
 #include <ws2tcpip.h>
@@ -1107,7 +1107,8 @@ static int dns_poll(int fd, short events, int timeout) {
        if (!events)
                return 0;
 
-       assert(fd >= 0 && (unsigned)fd < FD_SETSIZE);
+        if (fd < 0 || (unsigned)fd >= FD_SETSIZE)
+          return EINVAL;
 
        FD_ZERO(&rset);
        FD_ZERO(&wset);