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:
parent
7529f46a85
commit
aa6b2482cc
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 ))
|
||||
|
|
Loading…
Reference in New Issue