[PATCH 0/1] MR10051: ws2_32: Allow using duplicated socket handles in closesocket().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56927 This is similar to a08d6d8b, but just for `closesocket()`. [Testbot run with this patch](https://testbot.winehq.org/JobDetails.pl?Key=161786) -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10051
From: Bernhard Übelacker <bernhardu@mailbox.org> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56927 --- dlls/ws2_32/socket.c | 2 +- dlls/ws2_32/tests/sock.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 95cb3059022..f5580cab4e3 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -1353,7 +1353,7 @@ int WINAPI closesocket( SOCKET s ) return -1; } - if (!socket_list_remove( s )) + if (!socket_list_remove( s ) && !is_valid_socket( s )) { SetLastError( WSAENOTSOCK ); return -1; diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 8d589c63ea3..423a40cd243 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -14596,9 +14596,12 @@ static void test_valid_handle(void) ok(WSAGetLastError() == WSAENOTSOCK, "got error %u\n", WSAGetLastError()); CloseHandle(invalid); - CloseHandle(duplicated); - closesocket(client); - closesocket(server); + ret = closesocket((SOCKET)duplicated); + ok(!ret, "closesocket failed unexpectedly: %d\n", ret); + ret = closesocket(client); + ok(!ret, "closesocket failed unexpectedly: %d\n", ret); + ret = closesocket(server); + ok(!ret, "closesocket failed unexpectedly: %d\n", ret); } static void test_afunix_path( const char *path ) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10051
This merge request was approved by Erich Hoover. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10051
It's probably worth also testing that closesocket() fails on a non-socket (and that a subsequent CloseHandle succeeds.) -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10051#note_129263
participants (4)
-
Bernhard Übelacker -
Bernhard Übelacker (@bernhardu) -
Elizabeth Figura (@zfigura) -
Erich Hoover (@ehoover)