patch 7.4.1286
Problem:    ch_open() with a timeout doesn't work correctly.
Solution:   Change how select() is used.  Don't give an error on timeout.
            Add a test for ch_open() failing.
diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index 2a56c0d..8fcc73b 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -177,3 +177,27 @@
   sleep 10m
   call s:kill_server()
 endfunc
+
+" Test that trying to connect to a non-existing port fails quickly.
+func Test_connect_waittime()
+  let start = reltime()
+  let handle = ch_open('localhost:9876')
+  if handle >= 0
+    " Oops, port does exists.
+    call ch_close(handle)
+  else
+    let elapsed = reltime(start)
+    call assert_true(elapsed < 1.0)
+  endif
+
+  let start = reltime()
+  let handle = ch_open('localhost:9867', {'waittime': 2000})
+  if handle >= 0
+    " Oops, port does exists.
+    call ch_close(handle)
+  else
+    " Failed connection doesn't wait the full time.
+    let elapsed = reltime(start)
+    call assert_true(elapsed < 1.0)
+  endif
+endfunc