tst-getaddrinfo2.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /* Test by David L Stevens <dlstevens@us.ibm.com> [BZ #358] */
  2. #include <errno.h>
  3. #include <netdb.h>
  4. #include <unistd.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <sys/socket.h>
  9. static int
  10. do_test (void)
  11. {
  12. const char portstr[] = "583";
  13. int port = atoi (portstr);
  14. struct addrinfo hints, *aires, *pai;
  15. int rv;
  16. int res = 1;
  17. memset (&hints, 0, sizeof (hints));
  18. hints.ai_family = AF_INET;
  19. rv = getaddrinfo (NULL, portstr, &hints, &aires);
  20. if (rv == 0)
  21. {
  22. struct sockaddr_in *psin = 0;
  23. int got_tcp, got_udp;
  24. int err = 0;
  25. got_tcp = got_udp = 0;
  26. for (pai = aires; pai; pai = pai->ai_next)
  27. {
  28. printf ("ai_family=%d, ai_addrlen=%d, ai_socktype=%d",
  29. (int) pai->ai_family, (int) pai->ai_addrlen,
  30. (int) pai->ai_socktype);
  31. if (pai->ai_family == AF_INET)
  32. printf (", port=%d",
  33. ntohs (((struct sockaddr_in *) pai->ai_addr)->sin_port));
  34. puts ("");
  35. err |= pai->ai_family != AF_INET;
  36. err |= pai->ai_addrlen != sizeof (struct sockaddr_in);
  37. err |= pai->ai_addr == 0;
  38. if (pai->ai_family == AF_INET)
  39. err |=
  40. ntohs (((struct sockaddr_in *) pai->ai_addr)->sin_port) != port;
  41. got_tcp |= pai->ai_socktype == SOCK_STREAM;
  42. got_udp |= pai->ai_socktype == SOCK_DGRAM;
  43. if (err)
  44. break;
  45. }
  46. if (err)
  47. {
  48. printf ("FAIL getaddrinfo IPv4 socktype 0,513: "
  49. "fam %d alen %d addr %p addr/fam %d "
  50. "addr/port %d H[%d]\n",
  51. pai->ai_family, pai->ai_addrlen, psin,
  52. psin ? psin->sin_family : 0,
  53. psin ? psin->sin_port : 0,
  54. psin ? htons (psin->sin_port) : 0);
  55. }
  56. else if (got_tcp && got_udp)
  57. {
  58. printf ("SUCCESS getaddrinfo IPv4 socktype 0,513\n");
  59. res = 0;
  60. }
  61. else
  62. printf ("FAIL getaddrinfo IPv4 socktype 0,513 TCP %d"
  63. " UDP %d\n", got_tcp, got_udp);
  64. freeaddrinfo (aires);
  65. }
  66. else
  67. printf ("FAIL getaddrinfo IPv4 socktype 0,513 returns %d "
  68. "(\"%s\")\n", rv, gai_strerror (rv));
  69. return res;
  70. }
  71. #define TEST_FUNCTION do_test ()
  72. #include "../test-skeleton.c"