server: Poll for FD_CLOSE even if we cannot receive more data.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2021-05-13 22:54:35 -05:00 committed by Alexandre Julliard
parent 7529f46a85
commit aa6b2482cc
2 changed files with 4 additions and 5 deletions

View File

@ -4455,12 +4455,12 @@ static void test_close_events(struct event_test_ctx *ctx)
check_events(ctx, 0, 0, 0);
select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ);
if (ctx->is_message)
check_events_todo_msg(ctx, FD_CLOSE, 0, 200);
check_events(ctx, FD_CLOSE, 0, 200);
check_events(ctx, 0, 0, 0);
select_events(ctx, server, 0);
select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ);
if (ctx->is_message)
check_events_todo_msg(ctx, FD_CLOSE, 0, 200);
check_events(ctx, FD_CLOSE, 0, 200);
check_events(ctx, 0, 0, 0);
ret = recv(server, buffer, 5, 0);
@ -4553,7 +4553,7 @@ static void test_close_events(struct event_test_ctx *ctx)
check_events(ctx, 0, 0, 200);
select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ);
check_events_todo_event(ctx, FD_CLOSE, 0, 200);
check_events_todo(ctx, FD_CLOSE, 0, 200);
closesocket(server);
}

View File

@ -786,8 +786,7 @@ static int sock_get_poll_events( struct fd *fd )
else if (smask & FD_READ || (sock->state & FD_WINE_LISTENING && mask & FD_ACCEPT))
ev |= POLLIN | POLLPRI;
/* We use POLLIN with 0 bytes recv() as FD_CLOSE indication for stream sockets. */
else if (sock->type == WS_SOCK_STREAM && (sock->state & FD_READ) && (mask & FD_CLOSE) &&
!(sock->reported_events & FD_READ))
else if (sock->type == WS_SOCK_STREAM && (mask & FD_CLOSE) && !(sock->reported_events & FD_READ))
ev |= POLLIN;
if (async_queued( &sock->write_q ))