glibc/resolv/ga_test.c
Ulrich Drepper 2ace572170 Update.
* Versions.def: Add libanl definition.
	* shlig-versions: Add entry for libanl.
	* resolv/Makefile (distribute): Add gai_misc.h and ga_test.c.
	(routines): Add gai_sigqueue.
	(extra-libs): Add libanl.
	(libanl-routines): New variable.
	Add rules to build libanl and ga_test.
	* resolv/Versions [libc] (GLIBC_2.2.3): Add __gai_sigqueue.
	[libanl]: New library.
	* resolv/netdb.h: Add definitions for libanl.
	* resolv/getaddrinfo_a.c: New file.
	* resolv/gai_cancel.c: New file.
	* resolv/gai_error.c: New file.
	* resolv/gai_misc.c: New file.
	* resolv/gai_misc.h: New file.
	* resolv/gai_notify.c: New file.
	* resolv/gai_suspend.c: New file.
	* resolv/ga_test.c: New file.
	* sysdeps/generic/gai_sigqueue.c: New file.
	* sysdeps/unix/sysv/linux/gai_sigqueue.c: New file.
	* sysdeps/generic/bits/siginfo.h: Allow __need_sigevent_t being defined
	and provide only that definition.
	* sysdeps/unix/sysv/linux/alpha/bits/siginfo.h: Likewise.
	* sysdeps/unix/sysv/linux/bits/siginfo.h: Likewise.
	* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Likewise.
	* sysdeps/unix/sysv/linux/mips/bits/siginfo.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/siginfo.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h: Likewise.

	* rt/aio_misc.c: Fix typos in comments.
	* rt/lio_listio.c: Pretty printing.  Little optimization in request
	list handling.

	* elf/rtld.c: Remove commented out code.
2001-03-03 18:21:04 +00:00

100 lines
1.8 KiB
C

#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
int
main (void)
{
#define N 10
struct gaicb reqmem[N];
struct gaicb *req[N];
int n;
for (n = 0; n < N; ++n)
{
asprintf (&reqmem[n].ar_name, "test%d.test.redhat.com", 140 + n);
reqmem[n].ar_service = NULL;
reqmem[n].ar_request = NULL;
reqmem[n].ar_result = NULL;
req[n] = &reqmem[n];
}
if (getaddrinfo_a (GAI_NOWAIT, req, N, NULL) != 0)
{
puts ("queue call failed");
exit (1);
}
else
puts ("queue call successful");
while (1)
{
int any = 0;
for (n = 0; n < N; ++n)
if (req[n] != NULL && gai_error (req[n]) != EAI_INPROGRESS)
{
if (gai_error (req[n]) == 0)
{
struct addrinfo *runp = req[n]->ar_result;
while (runp != NULL)
{
switch (runp->ai_family)
{
case PF_INET:
{
struct sockaddr_in *sinp;
sinp = (struct sockaddr_in *) runp->ai_addr;
printf ("%2d: %s = %s\n", n,
req[n]->ar_name, inet_ntoa (sinp->sin_addr));
}
break;
default:
printf ("%2d: family %d\n", n, runp->ai_family);
break;
}
runp = runp->ai_next;
}
}
else
printf ("error for %d: %s\n", n,
gai_strerror (gai_error (req[n])));
req[n] = NULL;
break;
}
else if (req[n] != NULL)
any = 1;
if (n == N)
{
if (any)
gai_suspend (req, N, NULL);
else
break;
}
}
__libc_write(1,"got all\n", 8);
for (n = 0; n < N; ++n)
if (gai_error (&reqmem[n]) == 0)
{
struct addrinfo *runp = reqmem[n].ar_result;
while (runp != NULL)
{
struct addrinfo *oldp = runp;
runp = runp->ai_next;
freeaddrinfo (oldp);
}
}
return 0;
}