Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2005-04-18 22:56:52 +0400
committerCorinna Vinschen <corinna@vinschen.de>2005-04-18 22:56:52 +0400
commit04843bf4a05314c57cf2036917a0e52d95b79ade (patch)
treebbca4a0ea3133a0d6fbee71d9ff7e6057e2ee8d0 /winsup/cygwin/select.cc
parent2180b9627dbb4ef05b6205b678b36376511967e6 (diff)
* 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.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index 1c469cf63..2daa88a5f 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;
}