X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fmswindows.c;h=51342300c206668f7448a85523f34eb9c1b9389e;hp=245cff3b7abc6bbb65e0a22821087e48cbaa3836;hb=85b98d08341ccd2abd2b0335465927e85eb20757;hpb=cba3187919f9a25ea763443140fa3cc2131a40ad diff --git a/src/mswindows.c b/src/mswindows.c index 245cff3b..51342300 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. @@ -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; +}