getaddrinfo: Initialize sockets, to make it work under Windows.
authorSimon Josefsson <simon@josefsson.org>
Sat, 25 Sep 2010 16:48:45 +0000 (18:48 +0200)
committerSimon Josefsson <simon@josefsson.org>
Sat, 25 Sep 2010 16:48:45 +0000 (18:48 +0200)
ChangeLog
doc/gnulib.texi
lib/getaddrinfo.c
modules/getaddrinfo
tests/test-getaddrinfo.c

index e4692b7..cfcf9a9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2010-09-25  Simon Josefsson  <simon@josefsson.org>
+
+       * modules/getaddrinfo (Depends-on): Depend on the sockets module.
+       * lib/getaddrinfo.c (use_win32_p): Call gl_sockets_startup to make
+       sure Windows sockets are working before calling getaddrinfo.
+       * tests/test-getaddrinfo.c (main): Don't call WSAStartup here.
+       * doc/gnulib.texi (Windows sockets): Fix typo.
+
 2010-09-25  Bruno Haible  <bruno@clisp.org>
 
        Tests for module 'regex-quote'.
index fd5485e..3e1599c 100644 (file)
@@ -989,7 +989,7 @@ XP.  The function declaration is present if @code{WINVER >= 0x0501}.
 Windows 2000 does not have getaddrinfo in its @file{WS2_32.DLL}.
 
 Thus, if you want to assume Windows XP or later, you can add
-AC_DEFINE(WINVER, 0x0501) to avoid compiling to (partial) getaddrinfo
+AC_DEFINE(WINVER, 0x0501) to avoid compiling the (partial) getaddrinfo
 implementation.
 
 If you want to support Windows 2000, don't do anything.  The
index 76dc19e..ce75647 100644 (file)
@@ -59,6 +59,9 @@
 # define WIN32_NATIVE
 #endif
 
+/* gl_sockets_startup */
+#include "sockets.h"
+
 #ifdef WIN32_NATIVE
 typedef int (WSAAPI *getaddrinfo_func) (const char*, const char*,
                                         const struct addrinfo*,
@@ -101,6 +104,8 @@ use_win32_p (void)
       return 0;
     }
 
+  gl_sockets_startup (SOCKETS_1_1);
+
   return 1;
 }
 #endif
index f513652..1aa7208 100644 (file)
@@ -17,6 +17,7 @@ netdb
 strdup
 servent
 hostent
+sockets
 
 configure.ac:
 gl_GETADDRINFO
index bd245b4..15d6569 100644 (file)
@@ -161,25 +161,6 @@ simple (char const *host, char const *service)
 
 int main (void)
 {
-#if _WIN32
-  {
-    WORD requested;
-    WSADATA data;
-    int err;
-
-    requested = MAKEWORD (1, 1);
-    err = WSAStartup (requested, &data);
-    if (err != 0)
-      return 1;
-
-    if (data.wVersion < requested)
-      {
-        WSACleanup ();
-        return 2;
-      }
-  }
-#endif
-
   return simple (HOST1, SERV1)
     + simple (HOST2, SERV2)
     + simple (HOST3, SERV3)