mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	* 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.
		
			
				
	
	
		
			100 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			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;
 | 
						|
}
 |