glibc/posix/tst-getaddrinfo2.c
Ulrich Drepper ca225a410b [BZ #358]
Update.
2004-09-26  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/posix/getaddrinfo.c (getaddrinfo): Remove incorrect
	requirement on socktype and protocol.
	(gaih_inet): If numeric port number is given, return records for all
	possible socket types.
	* posix/tst-getaddrinfo2.c: New file.
	* posix/Makefile (tests): Add tst-getaddrinfo2.  [BZ #358]
2004-09-26 08:43:34 +00:00

76 lines
2.2 KiB
C

/* Test by David L Stevens <dlstevens@us.ibm.com> [BZ #358] */
#include <errno.h>
#include <netdb.h>
#include <unistd.h>
#include <sys/socket.h>
static int
do_test (void)
{
const char portstr[] = "583";
int port = atoi (portstr);
struct addrinfo hints, *aires, *pai;
int rv;
int res = 1;
memset (&hints, 0, sizeof (hints));
hints.ai_family = AF_INET;
rv = getaddrinfo (NULL, portstr, &hints, &aires);
if (rv == 0)
{
struct sockaddr_in *psin = 0;
int got_tcp, got_udp;
int err = 0;
got_tcp = got_udp = 0;
for (pai = aires; pai; pai = pai->ai_next)
{
printf ("ai_family=%d, ai_addrlen=%d, ai_socktype=%d",
(int) pai->ai_family, (int) pai->ai_addrlen,
(int) pai->ai_socktype);
if (pai->ai_family == AF_INET)
printf (", port=%d",
ntohs (((struct sockaddr_in *) pai->ai_addr)->sin_port));
puts ("");
err |= pai->ai_family != AF_INET;
err |= pai->ai_addrlen != sizeof (struct sockaddr_in);
err |= pai->ai_addr == 0;
if (pai->ai_family == AF_INET)
err |=
ntohs (((struct sockaddr_in *) pai->ai_addr)->sin_port) != port;
got_tcp |= pai->ai_socktype == SOCK_STREAM;
got_udp |= pai->ai_socktype == SOCK_DGRAM;
if (err)
break;
}
if (err)
{
printf ("FAIL getaddrinfo IPv4 socktype 0,513: "
"fam %d alen %d addr 0x%08X addr/fam %d "
"addr/port %d H[%d]\n",
pai->ai_family, pai->ai_addrlen, psin,
psin ? psin->sin_family : 0,
psin ? psin->sin_port : 0,
psin ? htons (psin->sin_port) : 0);
}
else if (got_tcp && got_udp)
{
printf ("SUCCESS getaddrinfo IPv4 socktype 0,513\n");
res = 0;
}
else
printf ("FAIL getaddrinfo IPv4 socktype 0,513 TCP %d"
" UDP %d\n", got_tcp, got_udp);
freeaddrinfo (aires);
}
else
printf ("FAIL getaddrinfo IPv4 socktype 0,513 returns %d "
"(\"%s\")\n", rv, gai_strerror (rv));
return res;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"