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