--- url.c.old	Tue Apr  3 14:20:23 2001
+++ url.c	Tue Apr 11 22:57:41 2001
@@ -1054,6 +1054,11 @@
 static CURLcode ConnectPlease(struct UrlData *data,
                               struct connectdata *conn)
 {
+#if defined(WIN32)
+  unsigned long nonblock = 0;
+  fd_set connectfd;
+  struct timeval conntimeout;
+#endif
 
 #ifndef ENABLE_IPV6
   conn->firstsocket = socket(AF_INET, SOCK_STREAM, 0);
@@ -1216,10 +1221,29 @@
     return CURLE_COULDNT_CONNECT;
   }
 #else
+  /* non-zero nonblock value sets socket as nonblocking under Win32 */
+#if defined(WIN32)
+  FD_ZERO (&connectfd);
+  FD_SET(conn->firstsocket, &connectfd);
+  if (conn->data->connecttimeout > 0) {
+	nonblock = 1;
+  }
+  ioctlsocket(conn->firstsocket, FIONBIO, &nonblock);
+#endif
   if (connect(conn->firstsocket,
               (struct sockaddr *) &(conn->serv_addr),
               sizeof(conn->serv_addr)
               ) < 0) {
+#if defined(WIN32)
+	  conntimeout.tv_sec = conn->data->connecttimeout;
+	  conntimeout.tv_usec = 0;	 
+	  if(-1 != select (conn->firstsocket + 1, NULL, &connectfd, NULL, &conntimeout)) {
+		  if (FD_ISSET(conn->firstsocket, &connectfd))
+			  return CURLE_OK;
+		  else
+			  errno = EINTR;
+	  }
+#endif
     switch(errno) {
 #ifdef ECONNREFUSED
       /* this should be made nicer */

