diff --git a/server/sock.c b/server/sock.c index 5d48c2d37ae..87628dab4b1 100644 --- a/server/sock.c +++ b/server/sock.c @@ -419,16 +419,17 @@ static void sock_poll_event( struct fd *fd, int event ) call and the invocation of this routine */ if ( errno != EAGAIN ) { + error = errno; + event |= POLLERR; if ( debug_level ) fprintf( stderr, "recv error on socket %p: %d\n", sock, errno ); - event |= POLLERR; } } } if ( (hangup_seen || event & (POLLHUP|POLLERR)) && (sock->state & (FD_READ|FD_WRITE)) ) { - error = sock_error( fd ); + error = error ? error : sock_error( fd ); if ( (event & POLLERR) || ( sock_shutdown_type == SOCK_SHUTDOWN_EOF && (event & POLLHUP) )) sock->state &= ~FD_WRITE; sock->state &= ~FD_READ;