server: Set FD_READ in only 1 place (cleanup).

This commit is contained in:
Mike Kaplinskiy 2010-05-12 01:59:01 -04:00 committed by Alexandre Julliard
parent 688b94b43d
commit f928580ac3
1 changed files with 4 additions and 13 deletions

View File

@ -381,18 +381,9 @@ static void sock_poll_event( struct fd *fd, int event )
/* Linux 2.4 doesn't report POLLHUP if only one side of the socket /* Linux 2.4 doesn't report POLLHUP if only one side of the socket
* has been closed, so we need to check for it explicitly here */ * has been closed, so we need to check for it explicitly here */
nr = recv( get_unix_fd( fd ), &dummy, 1, MSG_PEEK ); nr = recv( get_unix_fd( fd ), &dummy, 1, MSG_PEEK );
if ( nr > 0 ) if ( nr == 0 )
{
/* incoming data */
sock->pmask |= FD_READ;
sock->hmask |= (FD_READ|FD_CLOSE);
sock->errors[FD_READ_BIT] = 0;
if (debug_level)
fprintf(stderr, "socket %p is readable\n", sock );
}
else if ( nr == 0 )
hangup_seen = 1; hangup_seen = 1;
else else if ( nr < 0 )
{ {
/* EAGAIN can happen if an async recv() falls between the server's poll() /* EAGAIN can happen if an async recv() falls between the server's poll()
call and the invocation of this routine */ call and the invocation of this routine */
@ -411,14 +402,14 @@ static void sock_poll_event( struct fd *fd, int event )
{ {
hangup_seen = 1; hangup_seen = 1;
} }
else if ( event & POLLIN ) /* POLLIN for non-stream socket */
if ( event & POLLIN && !hangup_seen )
{ {
sock->pmask |= FD_READ; sock->pmask |= FD_READ;
sock->hmask |= (FD_READ|FD_CLOSE); sock->hmask |= (FD_READ|FD_CLOSE);
sock->errors[FD_READ_BIT] = 0; sock->errors[FD_READ_BIT] = 0;
if (debug_level) if (debug_level)
fprintf(stderr, "socket %p is readable\n", sock ); fprintf(stderr, "socket %p is readable\n", sock );
} }
if (event & POLLOUT) if (event & POLLOUT)