]> code.delx.au - gnu-emacs/blobdiff - src/ChangeLog
Support non-blocking connect on MS-Windows (Bug#20207)
[gnu-emacs] / src / ChangeLog
index 632b798ce08abea283569a419450ca9ec3cfcea2..67e04f6f41cdb7580dbd93b80d6ed216d67ae0b0 100644 (file)
@@ -1,3 +1,38 @@
+2015-03-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Support non-blocking connect on MS-Windows.
+       Based on ideas from Kim F. Storm <storm@cua.dk>, see
+       http://lists.gnu.org/archive/html/emacs-devel/2006-12/msg00873.html.
+
+       * w32proc.c (reader_thread): If the FILE_CONNECT flag is set, call
+       '_sys_wait_connect'.  If it returns STATUS_CONNECT_FAILED, exit
+       the thread with code 2.
+       (sys_select): Support 'wfds' in addition to 'rfds'.  If a
+       descriptor in 'wfds' has its bit set, but the corresponding
+       fd_info member doesn't have its FILE_CONNECT flag set, ignore the
+       descriptor.  Otherwise, acknowledge a successful non-blocking
+       connect by resetting the FILE_CONNECT flag and setting cp->status
+       to STATUS_READ_ACKNOWLEDGED.  (Bug#20207)
+
+       * w32.h (STATUS_CONNECT_FAILED): New enumeration value.
+       (struct _child_process): New member 'errcode'.
+       (FILE_CONNECT): New flag.
+       (_sys_wait_connect): Add prototype.
+
+       * w32.c (pfn_WSAEnumNetworkEvents): New function pointer.
+       (init_winsock): Load WSAEnumNetworkEvents from winsock DLL.
+       (set_errno): Map WSAEWOULDBLOCK and WSAENOTCONN.
+       (sys_connect): Support non-blocking 'connect' calls by setting the
+       FILE_CONNECT flag in the fd_info member and returning EINPROGRESS.
+       (_sys_read_ahead): Add debug message if this function is called
+       for a descriptor that waits for a non-blocking connect to complete.
+       (_sys_wait_connect): New function.
+       (sys_read): Support STATUS_CONNECT_FAILED.  Return the error code
+       recorded by _sys_wait_connect when the non-blocking connect
+       failed.  Don't call WSAGetLastError before a call to set_errno had
+       a chance to use its value, since WSAGetLastError clears the last
+       error.
+
 2015-03-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * editfns.c (save_excursion_save): Don't save the mark.