]> sjero.net Git - wget/blobdiff - src/mswindows.c
gnutls: deinit gnutls_x509_crt_t
[wget] / src / mswindows.c
index 245cff3b7abc6bbb65e0a22821087e48cbaa3836..51342300c206668f7448a85523f34eb9c1b9389e 100644 (file)
@@ -1,6 +1,7 @@
 /* mswindows.c -- Windows-specific support
    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+   2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+   Inc.
 
 This file is part of GNU Wget.
 
@@ -572,7 +573,7 @@ run_with_timeout (double seconds, void (*fun) (void *), void *arg)
   return rc;
 }
 
-\f
+
 #ifdef ENABLE_IPV6
 /* An inet_ntop implementation that uses WSAAddressToString.
    Prototype complies with POSIX 1003.1-2004.  This is only used under
@@ -614,3 +615,40 @@ inet_ntop (int af, const void *src, char *dst, socklen_t cnt)
   return (const char *) dst;
 }
 #endif
+
+
+void
+set_windows_fd_as_blocking_socket (int fd)
+{
+       /* 04/2011
+     gnulib select() converts blocking sockets to nonblocking in windows
+     discussed here:
+     http://old.nabble.com/blocking-socket-is-nonblocking-after-calling-gnulib-
+     select%28%29-in-windows-td31432857.html
+
+     wget uses blocking sockets so we must convert them back to blocking.
+       */
+       int ret = 0;
+       int wsagle = 0;
+       const int zero = 0;
+
+       do
+       {
+               if(wsagle == WSAEINPROGRESS)
+                 Sleep(1);  /* use windows sleep */
+               
+               WSASetLastError (0);
+               ret = ioctl (fd, FIONBIO, &zero);
+               wsagle = WSAGetLastError();
+       }
+  while (ret && (wsagle == WSAEINPROGRESS));
+
+       if(ret)
+    {
+      fprintf (stderr,
+               "ioctl() failed.  The socket could not be set as blocking.\n" );
+      DEBUGP (("Winsock error: %d\n", WSAGetLastError ()));
+      abort ();
+    }
+       return;
+}