Michael Müller : ws2_32: Add semi-stub for DisconnectEx.
Module: wine Branch: master Commit: 59ffe4e321dae9aa5135baa333e614140282a70a URL: http://source.winehq.org/git/wine.git/?a=commit;h=59ffe4e321dae9aa5135baa333... Author: Michael Müller <michael(a)fds-team.de> Date: Wed Apr 20 16:03:57 2016 +0200 ws2_32: Add semi-stub for DisconnectEx. Signed-off-by: Michael Müller <michael(a)fds-team.de> Signed-off-by: Sebastian Lackner <sebastian(a)fds-team.de> Signed-off-by: Bruno Jesus <00cpxxx(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ws2_32/socket.c | 21 ++++++++++++++++++++- dlls/ws2_32/tests/sock.c | 4 ++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index f62c9cd..8d58631 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -3552,6 +3552,24 @@ connection_success: return TRUE; } +/*********************************************************************** + * DisconnectEx + */ +static BOOL WINAPI WS2_DisconnectEx( SOCKET s, LPOVERLAPPED ov, DWORD flags, DWORD reserved ) +{ + TRACE( "socket %04lx, ov %p, flags 0x%x, reserved 0x%x\n", s, ov, flags, reserved ); + + if (flags & TF_REUSE_SOCKET) + FIXME( "Reusing socket not supported yet\n" ); + + if (ov) + { + ov->Internal = STATUS_PENDING; + ov->InternalHigh = 0; + } + + return !WS_shutdown( s, SD_BOTH ); +} /*********************************************************************** * getpeername (WS2_32.5) @@ -4767,7 +4785,8 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID } else if ( IsEqualGUID(&disconnectex_guid, in_buff) ) { - FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER: unimplemented DisconnectEx\n"); + *(LPFN_DISCONNECTEX *)out_buff = WS2_DisconnectEx; + break; } else if ( IsEqualGUID(&acceptex_guid, in_buff) ) { diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index e5da804..00555a9 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -7828,7 +7828,7 @@ static void test_DisconnectEx(void) &pDisconnectEx, sizeof(pDisconnectEx), &num_bytes, NULL, NULL); if (iret) { - skip("WSAIoctl failed to get DisconnectEx, error %d\n", WSAGetLastError()); + win_skip("WSAIoctl failed to get DisconnectEx, error %d\n", WSAGetLastError()); closesocket(connector); return; } @@ -7859,7 +7859,7 @@ static void test_DisconnectEx(void) memset(&overlapped, 0, sizeof(overlapped)); bret = pDisconnectEx(connector, &overlapped, 0, 0); ok(bret == FALSE, "DisconnectEx unexpectedly succeeded\n"); - ok(WSAGetLastError() == WSAENOTCONN, "expected WSAENOTCONN, got %d\n", WSAGetLastError()); + todo_wine ok(WSAGetLastError() == WSAENOTCONN, "expected WSAENOTCONN, got %d\n", WSAGetLastError()); iret = connect(connector, (struct sockaddr *)&address, addrlen); ok(iret == 0, "failed to connect, error %d\n", WSAGetLastError());
participants (1)
-
Alexandre Julliard