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
10static int
11do_test (void)
12{
13 const char portstr[] = "583";
14 int port = atoi (portstr);
15 struct addrinfo hints, *aires, *pai;
16 int rv;
17 int res = 1;
18
19 memset (&hints, 0, sizeof (hints));
20 hints.ai_family = AF_INET;
21 rv = getaddrinfo (NULL, portstr, &hints, &aires);
22 if (rv == 0)
23 {
24 struct sockaddr_in *psin = 0;
25 int got_tcp, got_udp;
26 int err = 0;
27
28 got_tcp = got_udp = 0;
29 for (pai = aires; pai; pai = pai->ai_next)
30 {
31 printf (format: "ai_family=%d, ai_addrlen=%d, ai_socktype=%d",
32 (int) pai->ai_family, (int) pai->ai_addrlen,
33 (int) pai->ai_socktype);
34 if (pai->ai_family == AF_INET)
35 printf (format: ", port=%d",
36 ntohs (((struct sockaddr_in *) pai->ai_addr)->sin_port));
37 puts (s: "");
38
39 err |= pai->ai_family != AF_INET;
40 err |= pai->ai_addrlen != sizeof (struct sockaddr_in);
41 err |= pai->ai_addr == 0;
42 if (pai->ai_family == AF_INET)
43 err |=
44 ntohs (((struct sockaddr_in *) pai->ai_addr)->sin_port) != port;
45 got_tcp |= pai->ai_socktype == SOCK_STREAM;
46 got_udp |= pai->ai_socktype == SOCK_DGRAM;
47 if (err)
48 break;
49 }
50 if (err)
51 {
52 printf (format: "FAIL getaddrinfo IPv4 socktype 0,513: "
53 "fam %d alen %d addr %p addr/fam %d "
54 "addr/port %d H[%d]\n",
55 pai->ai_family, pai->ai_addrlen, psin,
56 psin ? psin->sin_family : 0,
57 psin ? psin->sin_port : 0,
58 psin ? htons (psin->sin_port) : 0);
59 }
60 else if (got_tcp && got_udp)
61 {
62 printf (format: "SUCCESS getaddrinfo IPv4 socktype 0,513\n");
63 res = 0;
64 }
65 else
66 printf (format: "FAIL getaddrinfo IPv4 socktype 0,513 TCP %d"
67 " UDP %d\n", got_tcp, got_udp);
68 freeaddrinfo (aires);
69 }
70 else
71 printf (format: "FAIL getaddrinfo IPv4 socktype 0,513 returns %d "
72 "(\"%s\")\n", rv, gai_strerror (rv));
73
74 return res;
75}
76
77#define TEST_FUNCTION do_test ()
78#include "../test-skeleton.c"
79

source code of glibc/posix/tst-getaddrinfo2.c