patch 7.4.1527
Problem:    Channel test is flaky on MS-Windows.
Solution:   Limit the select() timeout to 50 msec and try with a new socket if
            it fails.
diff --git a/src/channel.c b/src/channel.c
index 4eedb03..094b58f 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -628,9 +628,8 @@
      */
     while (TRUE)
     {
-#ifndef WIN32
-	long elapsed_msec = 0;
-#endif
+	long	elapsed_msec = 0;
+	int	waitnow;
 
 	if (sd >= 0)
 	    sock_close(sd);
@@ -688,7 +687,7 @@
 	}
 
 	/* If connect() didn't finish then try using select() to wait for the
-	 * connection to be made. */
+	 * connection to be made. For Win32 always use select() to wait. */
 #ifndef WIN32
 	if (errno != ECONNREFUSED)
 #endif
@@ -702,19 +701,22 @@
 	    struct timeval	start_tv;
 	    struct timeval	end_tv;
 #endif
+	    /* Limit the waittime to 50 msec.  If it doesn't work within this
+	     * time we close the socket and try creating it again. */
+	    waitnow = waittime > 50 ? 50 : waittime;
 
 	    FD_ZERO(&rfds);
 	    FD_SET(sd, &rfds);
 	    FD_ZERO(&wfds);
 	    FD_SET(sd, &wfds);
 
-	    tv.tv_sec = waittime / 1000;
-	    tv.tv_usec = (waittime % 1000) * 1000;
+	    tv.tv_sec = waitnow / 1000;
+	    tv.tv_usec = (waitnow % 1000) * 1000;
 #ifndef WIN32
 	    gettimeofday(&start_tv, NULL);
 #endif
 	    ch_logn(channel,
-		    "Waiting for connection (waittime %d msec)...", waittime);
+		    "Waiting for connection (waiting %d msec)...", waitnow);
 	    ret = select((int)sd + 1, &rfds, &wfds, NULL, &tv);
 
 	    if (ret < 0)
@@ -729,10 +731,16 @@
 	    }
 
 #ifdef WIN32
-	    /* On Win32: select() is expected to work and wait for up to the
-	     * waittime for the socket to be open. */
+	    /* On Win32: select() is expected to work and wait for up to
+	     * "waitnow" msec for the socket to be open. */
 	    if (FD_ISSET(sd, &wfds))
 		break;
+	    elapsed_msec = waitnow;
+	    if (waittime > 1 && elapsed_msec < waittime)
+	    {
+		waittime -= elapsed_msec;
+		continue;
+	    }
 #else
 	    /* On Linux-like systems: See socket(7) for the behavior
 	     * After putting the socket in non-blocking mode, connect() will
@@ -778,17 +786,20 @@
 	{
 	    /* The port isn't ready but we also didn't get an error.
 	     * This happens when the server didn't open the socket
-	     * yet.  Wait a bit and try again. */
-	    mch_delay(waittime < 50 ? (long)waittime : 50L, TRUE);
-	    ui_breakcheck();
+	     * yet.  Select() may return early, wait until the remaining
+	     * "waitnow"  and try again. */
+	    waitnow -= elapsed_msec;
+	    waittime -= elapsed_msec;
+	    if (waitnow > 0)
+	    {
+		mch_delay((long)waitnow, TRUE);
+		ui_breakcheck();
+		waittime -= waitnow;
+	    }
 	    if (!got_int)
 	    {
-		/* reduce the waittime by the elapsed time and the 50
-		 * msec delay (or a bit more) */
-		waittime -= elapsed_msec;
-		if (waittime > 50)
-		    waittime -= 50;
-		else
+		if (waittime <= 0)
+		    /* give it one more try */
 		    waittime = 1;
 		continue;
 	    }
diff --git a/src/version.c b/src/version.c
index e98a2ae..af4ebc0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1527,
+/**/
     1526,
 /**/
     1525,