[PATCH] ws2_32: Divide values returned for SO_RCVBUF and SO_SNDBUF by two.
Alex Henrie <[email protected]> Tue, 7 Nov 2017 01:36:14 -0500
| Newsgroups | gmane.comp.emulators.wine.patches |
|---|---|
| Message-ID | <[email protected]> |
From: Sebastian Lackner <[email protected]> Signed-off-by: Alex Henrie <[email protected]> --- Patch from Wine Staging. It looks perfectly reasonable to me, and it fixes a couple of tests. --- dlls/ws2_32/socket.c | 8 ++++++++ dlls/ws2_32/tests/sock.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 79b93339eb..5bd8581240 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -3813,6 +3813,14 @@ INT WINAPI WS_getsockopt(SOCKET s, INT level, SetLastError(wsaErrno()); ret = SOCKET_ERROR; } +#ifdef __linux__ + else if (optname == SO_RCVBUF || optname == SO_SNDBUF) + { + /* For SO_RCVBUF / SO_SNDBUF, the Linux kernel always sets twice the value. + * Divide by two to ensure applications do not get confused by the result. */ + *(int *)optval /= 2; + } +#endif release_sock_fd( s, fd ); return ret; case WS_SO_ACCEPTCONN: diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 179ace4c6a..632655d4c6 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -1458,7 +1458,7 @@ static void test_set_getsockopt(void) value = 0xdeadbeef; err = getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *)&value, &size); ok( !err, "getsockopt(SO_SNDBUF) failed error: %u\n", WSAGetLastError() ); - todo_wine ok( value == 4096, "expected 4096, got %u\n", value ); + ok( value == 4096, "expected 4096, got %u\n", value ); /* SO_RCVBUF */ value = 4096; @@ -1468,7 +1468,7 @@ static void test_set_getsockopt(void) value = 0xdeadbeef; err = getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&value, &size); ok( !err, "getsockopt(SO_RCVBUF) failed error: %u\n", WSAGetLastError() ); - todo_wine ok( value == 4096, "expected 4096, got %u\n", value ); + ok( value == 4096, "expected 4096, got %u\n", value ); /* SO_LINGER */ for( i = 0; i < sizeof(linger_testvals)/sizeof(LINGER);i++) { -- 2.14.2