diff src/channel.c @ 8334:ad4b00bf2984 v7.4.1459

commit https://github.com/vim/vim/commit/e081e21f760bffc24ca98d5f9bbdb5f02e6aea79 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 28 22:33:46 2016 +0100 patch 7.4.1459 Problem: MS-Windows doesn't know socklen_t. Solution: Use previous method for WIN32.
author Christian Brabandt <cb@256bit.org>
date Sun, 28 Feb 2016 22:45:04 +0100
parents 07713b8243ac
children 8fa75a4c39bd
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -681,8 +681,10 @@ channel_open(
 	    struct timeval	tv;
 	    fd_set		rfds;
 	    fd_set		wfds;
+#ifndef WIN32
 	    int			so_error = 0;
 	    socklen_t		so_error_len = sizeof(so_error);
+#endif
 
 	    FD_ZERO(&rfds);
 	    FD_SET(sd, &rfds);
@@ -709,9 +711,12 @@ channel_open(
 		return NULL;
 	    }
 
+#ifdef WIN32
 	    /* On Win32: select() is expected to work and wait for up to the
-	     * waittime for the socket to be open.
-	     * On Linux-like systems: See socket(7) for the behavior
+	     * waittime for the socket to be open. */
+	    if (!FD_ISSET(sd, &wfds) || ret == 0)
+#else
+	    /* On Linux-like systems: See socket(7) for the behavior
 	     * After putting the socket in non-blocking mode, connect() will
 	     * return EINPROGRESS, select() will not wait (as if writing is
 	     * possible), need to use getsockopt() to check if the socket is
@@ -725,9 +730,9 @@ channel_open(
 		if (ret < 0 || (so_error != 0
 			&& so_error != EWOULDBLOCK
 			&& so_error != ECONNREFUSED
-#ifdef EINPROGRESS
+# ifdef EINPROGRESS
 			&& so_error != EINPROGRESS
-#endif
+# endif
 			))
 		{
 		    ch_errorn(channel,
@@ -741,6 +746,7 @@ channel_open(
 	    }
 
 	    if (!FD_ISSET(sd, &wfds) || so_error != 0)
+#endif
 	    {
 #ifndef WIN32
 		struct  timeval end_tv;