diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2005-04-18 18:56:52 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2005-04-18 18:56:52 +0000 |
commit | 04843bf4a05314c57cf2036917a0e52d95b79ade (patch) | |
tree | bbca4a0ea3133a0d6fbee71d9ff7e6057e2ee8d0 /winsup/cygwin/select.cc | |
parent | 2180b9627dbb4ef05b6205b678b36376511967e6 (diff) | |
download | newlib-04843bf4a05314c57cf2036917a0e52d95b79ade.zip newlib-04843bf4a05314c57cf2036917a0e52d95b79ade.tar.gz newlib-04843bf4a05314c57cf2036917a0e52d95b79ade.tar.bz2 |
* fhandler.h (enum conn_state): Add connect_failed state.
* fhandler_socket.cc (fhandler_socket::connect): Set connect_state to
connect_failed when connect failed.
* poll.cc (poll): Change errno to EINVAL if allocating memory fails,
according to SUSv3. Add socket descriptors always to except_fds. Test
for failed connect and set revents flags appropriately.
* select.cc (set_bits): Set connect_state to connect_failed when
select indicates failed nonblocking connect.
(fhandler_dev_null::select_except): Set except_ready to false so that
/dev/null is not always in except state.
(peek_socket): Fix bogus conditional.
(fhandler_socket::select_write): Treat all connect_states except
unconnected equivalent to return consistent results.
(fhandler_windows::select_except): Set except_ready to false so that
/dev/windows is not always in except state.
Diffstat (limited to 'winsup/cygwin/select.cc')
-rw-r--r-- | winsup/cygwin/select.cc | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index 1c469cf..2daa88a 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -352,7 +352,7 @@ set_bits (select_record *me, fd_set *readfds, fd_set *writefds, { UNIX_FD_SET (me->fd, writefds); if ((sock = me->fh->is_socket ())) - sock->connect_state (connected); + sock->connect_state (connect_failed); } if (me->except_selected) UNIX_FD_SET (me->fd, exceptfds); @@ -915,7 +915,7 @@ fhandler_dev_null::select_except (select_record *s) } s->h = get_handle (); s->except_selected = true; - s->except_ready = true; + s->except_ready = false; return s; } @@ -1271,11 +1271,11 @@ peek_socket (select_record *me, bool) set_winsock_errno (); return 0; } - if (WINSOCK_FD_ISSET (h, &ws_readfds) || (me->read_selected && me->read_ready)) + if (WINSOCK_FD_ISSET (h, &ws_readfds)) me->read_ready = true; - if (WINSOCK_FD_ISSET (h, &ws_writefds) || (me->write_selected && me->write_ready)) + if (WINSOCK_FD_ISSET (h, &ws_writefds)) me->write_ready = true; - if (WINSOCK_FD_ISSET (h, &ws_exceptfds) || ((me->except_selected || me->except_on_write) && me->except_ready)) + if (WINSOCK_FD_ISSET (h, &ws_exceptfds)) me->except_ready = true; } return me->read_ready || me->write_ready || me->except_ready; @@ -1460,7 +1460,7 @@ fhandler_socket::select_write (select_record *s) s->peek = peek_socket; s->write_ready = saw_shutdown_write () || connect_state () == unconnected; s->write_selected = true; - if (connect_state () == connect_pending) + if (connect_state () != unconnected) { s->except_ready = saw_shutdown_write () || saw_shutdown_read (); s->except_on_write = true; @@ -1559,7 +1559,7 @@ fhandler_windows::select_except (select_record *s) s->peek = peek_windows; s->h = get_handle (); s->except_selected = true; - s->except_ready = true; + s->except_ready = false; s->windows_handle = true; return s; } |