From 99dd3c5cba1debf39bb386790ebee923a50f1b0f Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Tue, 31 Oct 2023 12:16:51 -0500 Subject: [PATCH] ws2_32/tests: Add a regression test for interaction of sock_reselect() with event select. --- dlls/ws2_32/tests/sock.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 9f6cd487777..5e22496e6ef 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -14002,6 +14002,36 @@ static void test_tcp_sendto_recvfrom(void) closesocket(server); } +/* Regression test for an internal bug affecting wget.exe. */ +static void test_select_after_WSAEventSelect(void) +{ + SOCKET client, server; + HANDLE event; + int ret; + + tcp_socketpair(&client, &server); + event = CreateEventA(NULL, FALSE, FALSE, NULL); + + ret = WSAEventSelect(client, event, FD_READ); + ok(!ret, "got error %u\n", WSAGetLastError()); + + ret = send(server, "data", 4, 0); + ok(ret == 4, "got %d\n", ret); + + ret = WaitForSingleObject(event, 1000); + ok(!ret, "got %d\n", ret); + + /* Poll. This must not trigger any events to be signalled again. */ + check_poll(client, POLLRDNORM | POLLWRNORM); + + ret = WaitForSingleObject(event, 0); + todo_wine ok(ret == WAIT_TIMEOUT, "got %d\n", ret); + + CloseHandle(event); + closesocket(server); + closesocket(client); +} + START_TEST( sock ) { int i; @@ -14061,6 +14091,7 @@ START_TEST( sock ) test_write_watch(); test_events(); + test_select_after_WSAEventSelect(); test_ipv6only(); test_TransmitFile();