ws2_32/tests: Add tests about retrieving the local address of an interface bound socket.
This commit is contained in:
parent
0fbbb1297d
commit
dcfde9a9df
@ -4165,6 +4165,7 @@ static void test_getsockname(void)
|
|||||||
int sa_get_len = sa_set_len;
|
int sa_get_len = sa_set_len;
|
||||||
static const unsigned char null_padding[] = {0,0,0,0,0,0,0,0};
|
static const unsigned char null_padding[] = {0,0,0,0,0,0,0,0};
|
||||||
int ret;
|
int ret;
|
||||||
|
struct hostent *h;
|
||||||
|
|
||||||
if(WSAStartup(MAKEWORD(2,0), &wsa)){
|
if(WSAStartup(MAKEWORD(2,0), &wsa)){
|
||||||
trace("Winsock failed: %d. Aborting test\n", WSAGetLastError());
|
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");
|
"getsockname did not zero the sockaddr_in structure\n");
|
||||||
|
|
||||||
closesocket(sock);
|
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();
|
WSACleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user