diff options
Diffstat (limited to 'winsup/cygwin/select.cc')
-rw-r--r-- | winsup/cygwin/select.cc | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index c72cd0c76..75eb72637 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -473,6 +473,9 @@ set_bits (select_record *me, fd_set *readfds, fd_set *writefds, if (me->read_selected && me->read_ready) { UNIX_FD_SET (me->fd, readfds); + /* Special AF_LOCAL handling. */ + if ((sock = me->fh->is_socket ()) && sock->connect_state () == connect_pending) + sock->connect_state (connected); ready++; } if (me->write_selected && me->write_ready) @@ -480,10 +483,16 @@ set_bits (select_record *me, fd_set *readfds, fd_set *writefds, UNIX_FD_SET (me->fd, writefds); if (me->except_on_write && (sock = me->fh->is_socket ())) { - /* Set readfds entry in case of a failed connect. */ - if (!me->read_ready && me->read_selected - && sock->connect_state () == connect_failed) - UNIX_FD_SET (me->fd, readfds); + /* Special AF_LOCAL handling. */ + if (!me->read_ready && sock->connect_state () == connect_pending + && sock->af_local_connect ()) + { + if (me->read_selected) + UNIX_FD_SET (me->fd, readfds); + sock->connect_state (connect_failed); + } + else + sock->connect_state (connected); } ready++; } |