* 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.
This commit is contained in:
@@ -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);
|
||||
|
Reference in New Issue
Block a user