Zebediah Figura : ws2_32/tests: Add some tests for connecting a UDP socket.
Alexandre Julliard
julliard at winehq.org
Tue Jul 19 15:55:01 CDT 2022
Module: wine
Branch: master
Commit: 6a59b1a521e3f9201e35143e4d7b7afed804110c
URL: https://gitlab.winehq.org/wine/wine/-/commit/6a59b1a521e3f9201e35143e4d7b7afed804110c
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Sun May 29 13:10:13 2022 -0500
ws2_32/tests: Add some tests for connecting a UDP socket.
---
dlls/ws2_32/tests/sock.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 86 insertions(+)
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 685a2348666..184285927b5 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -13049,6 +13049,91 @@ static void test_connect_time(void)
closesocket(client);
}
+static void test_connect_udp(void)
+{
+ const struct sockaddr_in bind_addr = {.sin_family = AF_INET, .sin_addr.s_addr = htonl(INADDR_LOOPBACK)};
+ struct sockaddr_in addr, ret_addr;
+ SOCKET client, server;
+ char buffer[5];
+ int ret, len;
+
+ client = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ server = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ set_blocking(client, FALSE);
+ set_blocking(server, FALSE);
+
+ SetLastError(0xdeadbeef);
+ ret = send(client, "data", 4, 0);
+ ok(ret == -1, "got %d\n", ret);
+ todo_wine ok(GetLastError() == WSAENOTCONN, "got error %lu\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = recv(server, buffer, sizeof(buffer), 0);
+ ok(ret == -1, "got %d\n", ret);
+ todo_wine ok(GetLastError() == WSAEINVAL, "got error %lu\n", GetLastError());
+
+ ret = bind(server, (const struct sockaddr *)&bind_addr, sizeof(bind_addr));
+ ok(!ret, "got error %lu\n", GetLastError());
+ len = sizeof(addr);
+ ret = getsockname(server, (struct sockaddr *)&addr, &len);
+ ok(!ret, "got error %lu\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = recv(server, buffer, sizeof(buffer), 0);
+ ok(ret == -1, "got %d\n", ret);
+ ok(GetLastError() == WSAEWOULDBLOCK, "got error %lu\n", GetLastError());
+
+ ret = connect(client, (struct sockaddr *)&addr, sizeof(addr));
+ ok(!ret, "got error %lu\n", GetLastError());
+ ret = getpeername(client, (struct sockaddr *)&ret_addr, &len);
+ ok(!ret, "got error %lu\n", GetLastError());
+ ok(!memcmp(&ret_addr, &addr, sizeof(addr)), "addresses didn't match\n");
+
+ ret = getsockname(client, (struct sockaddr *)&ret_addr, &len);
+ ok(!ret, "got error %lu\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = getpeername(server, (struct sockaddr *)&ret_addr, &len);
+ ok(ret == -1, "got %d\n", ret);
+ ok(GetLastError() == WSAENOTCONN, "got error %lu\n", GetLastError());
+
+ ret = send(client, "data", 4, 0);
+ ok(ret == 4, "got %d\n", ret);
+
+ memset(buffer, 0xcc, sizeof(buffer));
+ ret = recv(server, buffer, sizeof(buffer), 0);
+ ok(ret == 4, "got %d\n", ret);
+ ok(!memcmp(buffer, "data", 4), "got %s\n", debugstr_an(buffer, ret));
+
+ SetLastError(0xdeadbeef);
+ ret = recv(server, buffer, sizeof(buffer), 0);
+ ok(ret == -1, "got %d\n", ret);
+ ok(GetLastError() == WSAEWOULDBLOCK, "got error %lu\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = send(server, "data", 4, 0);
+ ok(ret == -1, "got %d\n", ret);
+ todo_wine ok(GetLastError() == WSAENOTCONN, "got error %lu\n", GetLastError());
+
+ ret = connect(client, (struct sockaddr *)&addr, sizeof(addr));
+ todo_wine ok(!ret, "got error %lu\n", GetLastError());
+ ++addr.sin_port;
+ ret = connect(client, (struct sockaddr *)&addr, sizeof(addr));
+ todo_wine ok(!ret, "got error %lu\n", GetLastError());
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sin_family = AF_UNSPEC;
+ ret = connect(client, (struct sockaddr *)&addr, sizeof(addr));
+ todo_wine ok(!ret, "got error %lu\n", GetLastError());
+
+ ret = getpeername(client, (struct sockaddr *)&ret_addr, &len);
+ todo_wine ok(ret == -1, "got %d\n", ret);
+ todo_wine ok(GetLastError() == WSAENOTCONN, "got error %lu\n", GetLastError());
+
+ closesocket(server);
+ closesocket(client);
+}
+
START_TEST( sock )
{
int i;
@@ -13127,6 +13212,7 @@ START_TEST( sock )
test_timeout();
test_tcp_reset();
test_icmp();
+ test_connect_udp();
/* this is an io heavy test, do it at the end so the kernel doesn't start dropping packets */
test_send();
More information about the wine-cvs
mailing list