diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2005-03-21 21:56:50 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2005-03-21 21:56:50 +0300 |
commit | ef82f76c30c81149fe8cc22126843717d94352ad (patch) | |
tree | 28b3361e7f3cae0313217bf907cbc061e1ff78a2 /winsup/cygwin/select.cc | |
parent | b5e27d4009c7e3033495b950f3a07f37a1e5e579 (diff) |
* fhandler.h (class cygthread): Forward declare.
(fhandler_socket::sec_pipe): Remove.
(fhandler_socket::eid_pipe_name): Remove.
(fhandler_socket::eid_setblocking): New private method.
(fhandler_socket::eid_unsetblocking): Ditto
(fhandler_socket::eid_recv): Ditto
(fhandler_socket::eid_send): Ditto
(fhandler_socket::eid_accept): Ditto
(fhandler_socket::eid_connect): New public method.
* fhandler_socket.cc (ASYNC_MASK): Move to beginning of file.
(fhandler_socket::eid_pipe_name): Remove.
(fhandler_socket::set_socketpair_eids): Move down to fhandler_socket
methods.
(fhandler_socket::fhandler_socket): Drop initializing sec_pipe.
(fhandler_socket::~fhandler_socket): Drop closing sec_pipe.
(fhandler_socket::eid_setblocking): New method.
(fhandler_socket::eid_unsetblocking): New method.
(fhandler_socket::eid_recv): New method.
(fhandler_socket::eid_send): New method.
(fhandler_socket::eid_connect): New method.
(fhandler_socket::eid_accept): New method.
(fhandler_socket::dup): Drop sec_pipe handling.
(fhandler_socket::connect): Fix WinSock error handling. Prepare
eid credential transaction. Call eid_connect on successful connect.
(fhandler_socket::listen): Drop creating sec_pipe.
(fhandler_socket::accept): Slightly simplify code. Call eid_accept
on accepted socket.
(fhandler_socket::getpeereid): Reshuffle code for readability. Fix
test for invalid pid.
* select.cc (set_bits): Call eid_connect on successfully connected
socket.
Diffstat (limited to 'winsup/cygwin/select.cc')
-rw-r--r-- | winsup/cygwin/select.cc | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index eb86d7444..50489aa1d 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -326,6 +326,7 @@ set_bits (select_record *me, fd_set *readfds, fd_set *writefds, fd_set *exceptfds) { int ready = 0; + fhandler_socket *sock; select_printf ("me %p, testing fd %d (%s)", me, me->fd, me->fh->get_name ()); if (me->read_selected && me->read_ready) { @@ -335,8 +336,15 @@ set_bits (select_record *me, fd_set *readfds, fd_set *writefds, if (me->write_selected && me->write_ready) { UNIX_FD_SET (me->fd, writefds); - if (me->except_on_write && me->fh->is_socket ()) - ((fhandler_socket *) me->fh)->connect_state (connected); + if (me->except_on_write && (sock = me->fh->is_socket ())) + { + /* eid credential transaction on successful non-blocking connect. + Since the read bit indicates an error, don't start transaction + if it's set. */ + if (!me->read_ready && sock->connect_state () == connect_pending) + sock->eid_connect (); + sock->connect_state (connected); + } ready++; } if ((me->except_selected || me->except_on_write) && me->except_ready) @@ -344,8 +352,12 @@ set_bits (select_record *me, fd_set *readfds, fd_set *writefds, if (me->except_on_write) /* Only on sockets */ { UNIX_FD_SET (me->fd, writefds); - if (me->fh->is_socket ()) - ((fhandler_socket *) me->fh)->connect_state (connected); + if ((sock = me->fh->is_socket ())) + { + if (!me->read_ready && sock->connect_state () == connect_pending) + sock->eid_connect (); + sock->connect_state (connected); + } } if (me->except_selected) UNIX_FD_SET (me->fd, exceptfds); |