(linenum→info "unix/slp.c:2238")

glibc/2.7/resolv/ga_test.c

    1: #include <arpa/inet.h>
    2: #include <netinet/in.h>
    3: #include <netdb.h>
    4: #include <signal.h>
    5: #include <stdio.h>
    6: #include <stdlib.h>
    7: 
    8: 
    9: int
   10: main (void)
   11: {
   12: #define N 10
   13:   struct gaicb reqmem[N];
   14:   struct gaicb *req[N];
   15:   int n;
   16: 
   17:   for (n = 0; n < N; ++n)
   18:     {
   19:       asprintf (&reqmem[n].ar_name, "test%d.test.redhat.com", 140 + n);
   20:       reqmem[n].ar_service = NULL;
   21:       reqmem[n].ar_request = NULL;
   22:       reqmem[n].ar_result = NULL;
   23:       req[n] = &reqmem[n];
   24:     }
   25: 
   26:   if (getaddrinfo_a (GAI_NOWAIT, req, N, NULL) != 0)
   27:     {
   28:       puts ("queue call failed");
   29:       exit (1);
   30:     }
   31:   else
   32:     puts ("queue call successful");
   33: 
   34:   while (1)
   35:     {
   36:       int any = 0;
   37: 
   38:       for (n = 0; n < N; ++n)
   39:         if (req[n] != NULL && gai_error (req[n]) != EAI_INPROGRESS)
   40:           {
   41:             if (gai_error (req[n]) == 0)
   42:               {
   43:                 struct addrinfo *runp = req[n]->ar_result;
   44: 
   45:                 while (runp != NULL)
   46:                   {
   47:                     switch (runp->ai_family)
   48:                       {
   49:                       case PF_INET:
   50:                         {
   51:                           struct sockaddr_in *sinp;
   52: 
   53:                           sinp = (struct sockaddr_in *) runp->ai_addr;
   54:                           printf ("%2d: %s = %s\n", n,
   55:                                   req[n]->ar_name, inet_ntoa (sinp->sin_addr));
   56:                         }
   57:                         break;
   58:                       default:
   59:                         printf ("%2d: family %d\n", n, runp->ai_family);
   60:                         break;
   61:                       }
   62:                     runp = runp->ai_next;
   63:                   }
   64:               }
   65:             else
   66:               printf ("error for %d: %s\n", n,
   67:                       gai_strerror (gai_error (req[n])));
   68:             req[n] = NULL;
   69:             break;
   70:           }
   71:         else if (req[n] != NULL)
   72:           any = 1;
   73: 
   74:       if (n == N)
   75:         {
   76:           if (any)
   77:             gai_suspend (req, N, NULL);
   78:           else
   79:             break;
   80:         }
   81:     }
   82: 
   83:   __libc_write(1,"got all\n", 8);
   84: 
   85:   for (n = 0; n < N; ++n)
   86:     if (gai_error (&reqmem[n]) == 0)
   87:       {
   88:         struct addrinfo *runp = reqmem[n].ar_result;
   89: 
   90:         while (runp != NULL)
   91:           {
   92:             struct addrinfo *oldp = runp;
   93:             runp = runp->ai_next;
   94:             freeaddrinfo (oldp);
   95:           }
   96:       }
   97: 
   98:   return 0;
   99: }
Syntax (Markdown)