[1/2] ws2_32/tests: Add tests about retrieving the local address of an interface bound socket
Bruno Jesus
00cpxxx at gmail.com
Wed Apr 8 22:09:15 CDT 2015
Rebase and split of 110549 to make it more palatable, interface
binding is present in Linux >=3.12.
Also tested on NT4.
-------------- next part --------------
---
dlls/ws2_32/tests/sock.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 5f25471..8690579 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -4165,6 +4165,7 @@ static void test_getsockname(void)
int sa_get_len = sa_set_len;
static const unsigned char null_padding[] = {0,0,0,0,0,0,0,0};
int ret;
+ struct hostent *h;
if(WSAStartup(MAKEWORD(2,0), &wsa)){
trace("Winsock failed: %d. Aborting test\n", WSAGetLastError());
@@ -4212,6 +4213,39 @@ static void test_getsockname(void)
"getsockname did not zero the sockaddr_in structure\n");
closesocket(sock);
+
+ h = gethostbyname("");
+ if (h && h->h_length == 4) /* this test is only meaningful in IPv4 */
+ {
+ int i;
+ for (i = 0; h->h_addr_list[i]; i++)
+ {
+ char ipstr[32];
+ struct in_addr ip;
+ ip.s_addr = *(ULONG *) h->h_addr_list[i];
+
+ sock = socket(AF_INET, SOCK_DGRAM, 0);
+ ok(sock != INVALID_SOCKET, "socket failed with %d\n", GetLastError());
+
+ memset(&sa_set, 0, sizeof(sa_set));
+ sa_set.sin_family = AF_INET;
+ sa_set.sin_addr.s_addr = ip.s_addr;
+ /* The same address we bind must be the same address we get */
+ ret = bind(sock, (struct sockaddr*)&sa_set, sizeof(sa_set));
+ ok(ret == 0, "bind failed with %d\n", GetLastError());
+ sa_get_len = sizeof(sa_get);
+ ret = getsockname(sock, (struct sockaddr*)&sa_get, &sa_get_len);
+ ok(ret == 0, "getsockname failed with %d\n", GetLastError());
+ strcpy(ipstr, inet_ntoa(sa_get.sin_addr));
+ trace("testing bind on interface %s\n", ipstr);
+todo_wine
+ ok(sa_get.sin_addr.s_addr == sa_set.sin_addr.s_addr,
+ "address does not match: %s != %s", ipstr, inet_ntoa(sa_set.sin_addr));
+
+ closesocket(sock);
+ }
+ }
+
WSACleanup();
}
--
2.1.4
More information about the wine-patches
mailing list