X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fmswindows.c;h=179773e05fccfd99a9d566b6385540ca0ddbc9c5;hp=245cff3b7abc6bbb65e0a22821087e48cbaa3836;hb=HEAD;hpb=cba3187919f9a25ea763443140fa3cc2131a40ad diff --git a/src/mswindows.c b/src/mswindows.c index 245cff3b..179773e0 100644 --- a/src/mswindows.c +++ b/src/mswindows.c @@ -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. @@ -322,7 +323,7 @@ fork_to_background (void) rv = fake_fork_child (); if (rv < 0) { - fprintf (stderr, "fake_fork_child() failed\n"); + fprintf (stderr, _("fake_fork_child() failed\n")); abort (); } else if (rv == 0) @@ -330,7 +331,7 @@ fork_to_background (void) /* We're the parent. */ fake_fork (); /* If fake_fork() returns, it failed. */ - fprintf (stderr, "fake_fork() failed\n"); + fprintf (stderr, _("fake_fork() failed\n")); abort (); } /* If we get here, we're the child. */ @@ -572,7 +573,7 @@ run_with_timeout (double seconds, void (*fun) (void *), void *arg) return rc; } - + #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; +}