[PATCH 1/6] server: Poll for FD_CLOSE even if we cannot receive more data.

Zebediah Figura z.figura12 at gmail.com
Thu May 13 22:54:35 CDT 2021


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/ws2_32/tests/sock.c | 6 +++---
 server/sock.c            | 3 +--
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 266ddc14451..9116c2b169d 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -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);
 }
diff --git a/server/sock.c b/server/sock.c
index c8cd603149b..92202d317c4 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -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 ))
-- 
2.30.2




More information about the wine-devel mailing list