X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fmswindows.c;h=51342300c206668f7448a85523f34eb9c1b9389e;hp=d7749fa2ab35313d10bc078e041d70b86a5afb9b;hb=4a685764a845d5c74a76fcb49a4671f055b8d5f4;hpb=53427a9b76353246a4ddb0759d9bfdf952abe841 diff --git a/src/mswindows.c b/src/mswindows.c index d7749fa2..51342300 100644 --- a/src/mswindows.c +++ b/src/mswindows.c @@ -573,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 @@ -615,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; +}