Blame posix/tst-getaddrinfo2.c

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"