Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/ws2_32/socket.c | 107 ++++++++++++++++++++++++++++++++----------- 1 file changed, 80 insertions(+), 27 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 74e86e9d845..ed7218f9fb7 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -972,35 +972,88 @@ static NTSTATUS sock_error_to_ntstatus( DWORD err ) } }
-static DWORD NtStatusToWSAError( DWORD status ) +static DWORD NtStatusToWSAError( NTSTATUS status ) { - switch ( status ) + static const struct { - case STATUS_SUCCESS: return 0; - case STATUS_PENDING: return WSA_IO_PENDING; - case STATUS_INVALID_HANDLE: - case STATUS_OBJECT_TYPE_MISMATCH: return WSAENOTSOCK; - case STATUS_INVALID_PARAMETER: return WSAEINVAL; - case STATUS_PIPE_DISCONNECTED: return WSAESHUTDOWN; - case STATUS_NETWORK_BUSY: return WSAEALREADY; - case STATUS_NETWORK_UNREACHABLE: return WSAENETUNREACH; - case STATUS_CONNECTION_REFUSED: return WSAECONNREFUSED; - case STATUS_INVALID_CONNECTION: return WSAENOTCONN; - case STATUS_CONNECTION_RESET: return WSAECONNRESET; - case STATUS_CONNECTION_ABORTED: return WSAECONNABORTED; - case STATUS_CANCELLED: return WSA_OPERATION_ABORTED; - case STATUS_SHARING_VIOLATION: return WSAEADDRINUSE; - case STATUS_IO_TIMEOUT: - case STATUS_TIMEOUT: return WSAETIMEDOUT; - case STATUS_ACCESS_VIOLATION: return WSAEFAULT; - case STATUS_ACCESS_DENIED: return WSAEACCES; - case STATUS_TOO_MANY_OPENED_FILES: return WSAEMFILE; - case STATUS_DEVICE_NOT_READY: return WSAEWOULDBLOCK; - case STATUS_BUFFER_OVERFLOW: return WSAEMSGSIZE; - case STATUS_NOT_SUPPORTED: return WSAEOPNOTSUPP; - case STATUS_HOST_UNREACHABLE: return WSAEHOSTUNREACH; - default: return RtlNtStatusToDosError( status ); + NTSTATUS status; + DWORD error; } + errors[] = + { + {STATUS_PENDING, ERROR_IO_PENDING}, + + {STATUS_BUFFER_OVERFLOW, WSAEMSGSIZE}, + + {STATUS_NOT_IMPLEMENTED, WSAEOPNOTSUPP}, + {STATUS_ACCESS_VIOLATION, WSAEFAULT}, + {STATUS_PAGEFILE_QUOTA, WSAENOBUFS}, + {STATUS_INVALID_HANDLE, WSAENOTSOCK}, + {STATUS_NO_SUCH_DEVICE, WSAENETDOWN}, + {STATUS_NO_SUCH_FILE, WSAENETDOWN}, + {STATUS_NO_MEMORY, WSAENOBUFS}, + {STATUS_CONFLICTING_ADDRESSES, WSAENOBUFS}, + {STATUS_ACCESS_DENIED, WSAEACCES}, + {STATUS_BUFFER_TOO_SMALL, WSAEFAULT}, + {STATUS_OBJECT_TYPE_MISMATCH, WSAENOTSOCK}, + {STATUS_OBJECT_NAME_NOT_FOUND, WSAENETDOWN}, + {STATUS_OBJECT_PATH_NOT_FOUND, WSAENETDOWN}, + {STATUS_SHARING_VIOLATION, WSAEADDRINUSE}, + {STATUS_QUOTA_EXCEEDED, WSAENOBUFS}, + {STATUS_TOO_MANY_PAGING_FILES, WSAENOBUFS}, + {STATUS_INSUFFICIENT_RESOURCES, WSAENOBUFS}, + {STATUS_WORKING_SET_QUOTA, WSAENOBUFS}, + {STATUS_DEVICE_NOT_READY, WSAEWOULDBLOCK}, + {STATUS_PIPE_DISCONNECTED, WSAESHUTDOWN}, + {STATUS_IO_TIMEOUT, WSAETIMEDOUT}, + {STATUS_NOT_SUPPORTED, WSAEOPNOTSUPP}, + {STATUS_REMOTE_NOT_LISTENING, WSAECONNREFUSED}, + {STATUS_BAD_NETWORK_PATH, WSAENETUNREACH}, + {STATUS_NETWORK_BUSY, WSAENETDOWN}, + {STATUS_INVALID_NETWORK_RESPONSE, WSAENETDOWN}, + {STATUS_UNEXPECTED_NETWORK_ERROR, WSAENETDOWN}, + {STATUS_REQUEST_NOT_ACCEPTED, WSAEWOULDBLOCK}, + {STATUS_CANCELLED, ERROR_OPERATION_ABORTED}, + {STATUS_COMMITMENT_LIMIT, WSAENOBUFS}, + {STATUS_LOCAL_DISCONNECT, WSAECONNABORTED}, + {STATUS_REMOTE_DISCONNECT, WSAECONNRESET}, + {STATUS_REMOTE_RESOURCES, WSAENOBUFS}, + {STATUS_LINK_FAILED, WSAECONNRESET}, + {STATUS_LINK_TIMEOUT, WSAETIMEDOUT}, + {STATUS_INVALID_CONNECTION, WSAENOTCONN}, + {STATUS_INVALID_ADDRESS, WSAEADDRNOTAVAIL}, + {STATUS_INVALID_BUFFER_SIZE, WSAEMSGSIZE}, + {STATUS_INVALID_ADDRESS_COMPONENT, WSAEADDRNOTAVAIL}, + {STATUS_TOO_MANY_ADDRESSES, WSAENOBUFS}, + {STATUS_ADDRESS_ALREADY_EXISTS, WSAEADDRINUSE}, + {STATUS_CONNECTION_DISCONNECTED, WSAECONNRESET}, + {STATUS_CONNECTION_RESET, WSAECONNRESET}, + {STATUS_TRANSACTION_ABORTED, WSAECONNABORTED}, + {STATUS_CONNECTION_REFUSED, WSAECONNREFUSED}, + {STATUS_GRACEFUL_DISCONNECT, WSAEDISCON}, + {STATUS_CONNECTION_ACTIVE, WSAEISCONN}, + {STATUS_NETWORK_UNREACHABLE, WSAENETUNREACH}, + {STATUS_HOST_UNREACHABLE, WSAEHOSTUNREACH}, + {STATUS_PROTOCOL_UNREACHABLE, WSAENETUNREACH}, + {STATUS_PORT_UNREACHABLE, WSAECONNRESET}, + {STATUS_REQUEST_ABORTED, WSAEINTR}, + {STATUS_CONNECTION_ABORTED, WSAECONNABORTED}, + {STATUS_DATATYPE_MISALIGNMENT_ERROR,WSAEFAULT}, + {STATUS_HOST_DOWN, WSAEHOSTDOWN}, + {0x80070000 | ERROR_IO_INCOMPLETE, ERROR_IO_INCOMPLETE}, + {0xc0010000 | ERROR_IO_INCOMPLETE, ERROR_IO_INCOMPLETE}, + {0xc0070000 | ERROR_IO_INCOMPLETE, ERROR_IO_INCOMPLETE}, + }; + + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(errors); ++i) + { + if (errors[i].status == status) + return errors[i].error; + } + + return NT_SUCCESS(status) ? RtlNtStatusToDosErrorNoTeb(status) : WSAEINVAL; }
/* set last error code from NT status without mapping WSA errors */ @@ -5871,7 +5924,7 @@ SOCKET WINAPI WSASocketW(int af, int type, int protocol, IOCTL_AFD_CREATE, &create_params, sizeof(create_params), NULL, 0))) { WARN("Failed to initialize socket, status %#x.\n", status); - err = NtStatusToWSAError(status); + err = RtlNtStatusToDosError( status ); if (err == WSAEACCES) /* raw socket denied */ { if (type == SOCK_RAW)
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/ws2_32/socket.c | 2 +- dlls/ws2_32/tests/sock.c | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index ed7218f9fb7..273a6b159f4 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -5737,7 +5737,7 @@ BOOL WINAPI WSAGetOverlappedResult( SOCKET s, LPWSAOVERLAPPED lpOverlapped, if ( lpdwFlags ) *lpdwFlags = lpOverlapped->u.s.Offset;
- if (status) SetLastError( RtlNtStatusToDosError(status) ); + SetLastError( NtStatusToWSAError(status) ); return !status; }
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 627c12b8a1f..a84f05becbf 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -8701,14 +8701,9 @@ static void test_WSAGetOverlappedResult(void) } else { - todo_wine_if (!NT_SUCCESS(status) - && LOWORD(status) != WSAEINVAL - && status != STATUS_CANCELLED - && status != (0x80070000 | ERROR_IO_INCOMPLETE) - && status != (0xc0070000 | ERROR_IO_INCOMPLETE)) - ok(WSAGetLastError() == expect - || (status == (0xc0070000 | ERROR_IO_INCOMPLETE) && WSAGetLastError() == WSAEINVAL), /* < win8 */ - "status %#x: expected error %u, got %u\n", status, expect, WSAGetLastError()); + ok(WSAGetLastError() == expect + || (status == (0xc0070000 | ERROR_IO_INCOMPLETE) && WSAGetLastError() == WSAEINVAL), /* < win8 */ + "status %#x: expected error %u, got %u\n", status, expect, WSAGetLastError()); } } }
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/ws2_32/socket.c | 2 +- dlls/ws2_32/tests/sock.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 273a6b159f4..3a8bfa0ce41 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -5738,7 +5738,7 @@ BOOL WINAPI WSAGetOverlappedResult( SOCKET s, LPWSAOVERLAPPED lpOverlapped, *lpdwFlags = lpOverlapped->u.s.Offset;
SetLastError( NtStatusToWSAError(status) ); - return !status; + return NT_SUCCESS( status ); }
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index a84f05becbf..eeba272076b 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -8690,8 +8690,7 @@ static void test_WSAGetOverlappedResult(void) overlapped.Internal = status; WSASetLastError(0xdeadbeef); ret = WSAGetOverlappedResult(s, &overlapped, &size, FALSE, &flags); - todo_wine_if (expect_ret && status) - ok(ret == expect_ret, "status %#x: expected %d, got %d\n", status, expect_ret, ret); + ok(ret == expect_ret, "status %#x: expected %d, got %d\n", status, expect_ret, ret); if (ret) { ok(WSAGetLastError() == expect /* >= win10 1809 */
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/ws2_32/tests/sock.c | 57 +++++++++------------------------------- 1 file changed, 13 insertions(+), 44 deletions(-)
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index eeba272076b..116f9e23224 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -160,52 +160,16 @@ static int client_id; static SOCKET setup_server_socket(struct sockaddr_in *addr, int *len); static SOCKET setup_connector_socket(struct sockaddr_in *addr, int len, BOOL nonblock);
-static void tcp_socketpair(SOCKET *src, SOCKET *dst) -{ - SOCKET server = INVALID_SOCKET; - struct sockaddr_in addr; - int len; - int ret; - - *src = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - ok(*src != INVALID_SOCKET, "failed to create socket, error %u\n", WSAGetLastError()); - - server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - ok(server != INVALID_SOCKET, "failed to create socket, error %u\n", WSAGetLastError()); - - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = inet_addr("127.0.0.1"); - ret = bind(server, (struct sockaddr*)&addr, sizeof(addr)); - ok(!ret, "failed to bind socket, error %u\n", WSAGetLastError()); - - len = sizeof(addr); - ret = getsockname(server, (struct sockaddr*)&addr, &len); - ok(!ret, "failed to get address, error %u\n", WSAGetLastError()); - - ret = listen(server, 1); - ok(!ret, "failed to listen, error %u\n", WSAGetLastError()); - - ret = connect(*src, (struct sockaddr*)&addr, sizeof(addr)); - ok(!ret, "failed to connect, error %u\n", WSAGetLastError()); - - len = sizeof(addr); - *dst = accept(server, (struct sockaddr*)&addr, &len); - ok(*dst != INVALID_SOCKET, "failed to accept, error %u\n", WSAGetLastError()); - - closesocket(server); -} - -static void tcp_socketpair_ovl(SOCKET *src, SOCKET *dst) +static void tcp_socketpair_flags(SOCKET *src, SOCKET *dst, DWORD flags) { SOCKET server = INVALID_SOCKET; struct sockaddr_in addr; int len, ret;
- *src = WSASocketW(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED); + *src = WSASocketW(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, flags); ok(*src != INVALID_SOCKET, "failed to create socket, error %u\n", WSAGetLastError());
- server = WSASocketW(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED); + server = WSASocketW(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, flags); ok(server != INVALID_SOCKET, "failed to create socket, error %u\n", WSAGetLastError());
memset(&addr, 0, sizeof(addr)); @@ -231,6 +195,11 @@ static void tcp_socketpair_ovl(SOCKET *src, SOCKET *dst) closesocket(server); }
+static void tcp_socketpair(SOCKET *src, SOCKET *dst) +{ + tcp_socketpair_flags(src, dst, WSA_FLAG_OVERLAPPED); +} + static void set_so_opentype ( BOOL overlapped ) { int optval = !overlapped, newval, len = sizeof (int); @@ -8377,29 +8346,29 @@ static void test_iocp(void) SOCKET src, dst; int i;
- tcp_socketpair_ovl(&src, &dst); + tcp_socketpair(&src, &dst); sync_read(src, dst); iocp_async_read(src, dst); closesocket(src); closesocket(dst);
- tcp_socketpair_ovl(&src, &dst); + tcp_socketpair(&src, &dst); iocp_async_read_thread(src, dst); closesocket(src); closesocket(dst);
for (i = 0; i <= 2; i++) { - tcp_socketpair_ovl(&src, &dst); + tcp_socketpair(&src, &dst); iocp_async_read_closesocket(src, i); closesocket(dst); }
- tcp_socketpair_ovl(&src, &dst); + tcp_socketpair(&src, &dst); iocp_async_closesocket(src); closesocket(dst);
- tcp_socketpair_ovl(&src, &dst); + tcp_socketpair(&src, &dst); iocp_async_read_thread_closesocket(src); closesocket(dst); }
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/ws2_32/tests/sock.c | 189 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+)
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 116f9e23224..42cad9107e6 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -8679,6 +8679,194 @@ static void test_WSAGetOverlappedResult(void) closesocket(s); }
+struct nonblocking_async_recv_params +{ + SOCKET client; + HANDLE event; +}; + +static DWORD CALLBACK nonblocking_async_recv_thread(void *arg) +{ + const struct nonblocking_async_recv_params *params = arg; + OVERLAPPED overlapped = {0}; + DWORD flags = 0, size; + char buffer[5]; + WSABUF wsabuf; + int ret; + + overlapped.hEvent = params->event; + wsabuf.buf = buffer; + wsabuf.len = sizeof(buffer); + memset(buffer, 0, sizeof(buffer)); + ret = WSARecv(params->client, &wsabuf, 1, NULL, &flags, &overlapped, NULL); + todo_wine_if (!params->event) ok(!ret, "got %d\n", ret); + ret = GetOverlappedResult((HANDLE)params->client, &overlapped, &size, FALSE); + ok(ret, "got error %u\n", GetLastError()); + todo_wine ok(size == 4, "got size %u\n", size); + todo_wine_if (!params->event) ok(!strcmp(buffer, "data"), "got %s\n", debugstr_an(buffer, size)); + + return 0; +} + +static void test_nonblocking_async_recv(void) +{ + struct nonblocking_async_recv_params params; + OVERLAPPED overlapped = {0}; + SOCKET client, server; + DWORD flags = 0, size; + HANDLE thread, event; + char buffer[5]; + WSABUF wsabuf; + int ret; + + event = CreateEventW(NULL, TRUE, FALSE, NULL); + wsabuf.buf = buffer; + wsabuf.len = sizeof(buffer); + + tcp_socketpair(&client, &server); + set_blocking(client, FALSE); + set_blocking(server, FALSE); + + WSASetLastError(0xdeadbeef); + ret = recv(client, buffer, sizeof(buffer), 0); + ok(ret == -1, "got %d\n", ret); + ok(WSAGetLastError() == WSAEWOULDBLOCK, "got error %u\n", WSAGetLastError()); + + WSASetLastError(0xdeadbeef); + overlapped.Internal = 0xdeadbeef; + ret = WSARecv(client, &wsabuf, 1, &size, &flags, NULL, NULL); + ok(ret == -1, "got %d\n", ret); + ok(WSAGetLastError() == WSAEWOULDBLOCK, "got error %u\n", WSAGetLastError()); + ok(overlapped.Internal == 0xdeadbeef, "got status %#x\n", (NTSTATUS)overlapped.Internal); + + /* Overlapped, with a NULL event. */ + + overlapped.hEvent = NULL; + + WSASetLastError(0xdeadbeef); + ret = WSARecv(client, &wsabuf, 1, NULL, &flags, &overlapped, NULL); + ok(ret == -1, "got %d\n", ret); + ok(WSAGetLastError() == ERROR_IO_PENDING, "got error %u\n", WSAGetLastError()); + ret = WaitForSingleObject((HANDLE)client, 0); + ok(ret == WAIT_TIMEOUT, "wait timed out\n"); + + ret = send(server, "data", 4, 0); + ok(ret == 4, "got %d\n", ret); + + ret = WaitForSingleObject((HANDLE)client, 1000); + ok(!ret, "wait timed out\n"); + ret = GetOverlappedResult((HANDLE)client, &overlapped, &size, FALSE); + ok(ret, "got error %u\n", GetLastError()); + ok(size == 4, "got size %u\n", size); + ok(!strcmp(buffer, "data"), "got %s\n", debugstr_an(buffer, size)); + + /* Overlapped, with a non-NULL event. */ + + overlapped.hEvent = event; + + WSASetLastError(0xdeadbeef); + ret = WSARecv(client, &wsabuf, 1, NULL, &flags, &overlapped, NULL); + ok(ret == -1, "got %d\n", ret); + ok(WSAGetLastError() == ERROR_IO_PENDING, "got error %u\n", WSAGetLastError()); + ret = WaitForSingleObject(event, 0); + ok(ret == WAIT_TIMEOUT, "wait timed out\n"); + + ret = send(server, "data", 4, 0); + ok(ret == 4, "got %d\n", ret); + + ret = WaitForSingleObject(event, 1000); + ok(!ret, "wait timed out\n"); + ret = GetOverlappedResult((HANDLE)client, &overlapped, &size, FALSE); + ok(ret, "got error %u\n", GetLastError()); + ok(size == 4, "got size %u\n", size); + ok(!strcmp(buffer, "data"), "got %s\n", debugstr_an(buffer, size)); + + /* With data already in the pipe. */ + + ret = send(server, "data", 4, 0); + ok(ret == 4, "got %d\n", ret); + + memset(buffer, 0, sizeof(buffer)); + ret = WSARecv(client, &wsabuf, 1, NULL, &flags, &overlapped, NULL); + ok(!ret, "got %d\n", ret); + ret = GetOverlappedResult((HANDLE)client, &overlapped, &size, FALSE); + ok(ret, "got error %u\n", GetLastError()); + ok(size == 4, "got size %u\n", size); + ok(!strcmp(buffer, "data"), "got %s\n", debugstr_an(buffer, size)); + + closesocket(client); + closesocket(server); + + /* With a non-overlapped socket, WSARecv() always blocks when passed an + * overlapped structure, but returns WSAEWOULDBLOCK otherwise. */ + + tcp_socketpair_flags(&client, &server, 0); + set_blocking(client, FALSE); + set_blocking(server, FALSE); + + WSASetLastError(0xdeadbeef); + ret = recv(client, buffer, sizeof(buffer), 0); + ok(ret == -1, "got %d\n", ret); + ok(WSAGetLastError() == WSAEWOULDBLOCK, "got error %u\n", WSAGetLastError()); + + WSASetLastError(0xdeadbeef); + overlapped.Internal = 0xdeadbeef; + ret = WSARecv(client, &wsabuf, 1, &size, &flags, NULL, NULL); + ok(ret == -1, "got %d\n", ret); + ok(WSAGetLastError() == WSAEWOULDBLOCK, "got error %u\n", WSAGetLastError()); + ok(overlapped.Internal == 0xdeadbeef, "got status %#x\n", (NTSTATUS)overlapped.Internal); + + /* Overlapped, with a NULL event. */ + + params.client = client; + params.event = NULL; + thread = CreateThread(NULL, 0, nonblocking_async_recv_thread, ¶ms, 0, NULL); + + ret = WaitForSingleObject(thread, 200); + todo_wine ok(ret == WAIT_TIMEOUT, "expected timeout\n"); + + ret = send(server, "data", 4, 0); + ok(ret == 4, "got %d\n", ret); + + ret = WaitForSingleObject(thread, 200); + ok(!ret, "wait timed out\n"); + CloseHandle(thread); + + /* Overlapped, with a non-NULL event. */ + + params.client = client; + params.event = event; + thread = CreateThread(NULL, 0, nonblocking_async_recv_thread, ¶ms, 0, NULL); + + ret = WaitForSingleObject(thread, 200); + todo_wine ok(ret == WAIT_TIMEOUT, "expected timeout\n"); + + ret = send(server, "data", 4, 0); + ok(ret == 4, "got %d\n", ret); + + ret = WaitForSingleObject(thread, 200); + ok(!ret, "wait timed out\n"); + CloseHandle(thread); + + /* With data already in the pipe. */ + + ret = send(server, "data", 4, 0); + ok(ret == 4, "got %d\n", ret); + + memset(buffer, 0, sizeof(buffer)); + ret = WSARecv(client, &wsabuf, 1, NULL, &flags, &overlapped, NULL); + ok(!ret, "got %d\n", ret); + ret = GetOverlappedResult((HANDLE)client, &overlapped, &size, FALSE); + todo_wine ok(ret, "got error %u\n", GetLastError()); + ok(size == 4, "got size %u\n", size); + todo_wine ok(!strcmp(buffer, "data"), "got %s\n", debugstr_an(buffer, size)); + + closesocket(client); + closesocket(server); + + CloseHandle(overlapped.hEvent); +} + START_TEST( sock ) { int i; @@ -8735,6 +8923,7 @@ START_TEST( sock ) test_bind(); test_connecting_socket(); test_WSAGetOverlappedResult(); + test_nonblocking_async_recv();
/* this is an io heavy test, do it at the end so the kernel doesn't start dropping packets */ test_send();
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=90024
Your paranoid android.
=== wvistau64 (64 bit report) ===
ws2_32: sock.c:8791: Test failed: got -1