DOCUMENT ID:  1101-02

SYNOPSIS:     Sample program for using gethostbyname

OS RELEASE:   2.1, 2.4, 2.5 

PRODUCT:      Solaris

KEYWORDS:     gethostbyname function hostent structure host name


DESCRIPTION:

This program demonstrates the use of gethostbyname function.


SOLUTION:

The function gethostbyname returns a pointer to a hostent structure. 
One of the most common uses of the function is converting a host string
to an ip address.  Conversion to an alias is also possible. 

      struct hostent {
       char *h_table;         /* official host name             */
       char **h_aliases;      /* AKA's                          */
       char h_addrtype;       /* host address type              */
       char h_length;         /* address length   always 4      */
       char **h_addr_list;    /* name server supplied list list */
        };

"h_table"     points to a static string which containing the host
              name.
"h_aliases"   points to an array of addresses of alias strings.
"h_addr_type" address type is hardcoded to AF_INET (internet)
"h_length"    is always 4.
"h_addr_list" points to an array of pointers to in_addr 
              structures.  

Each struct is one 32 bit ip address.  The list is terminated by a NULL
pointer.  Note that all "**" lists have a null entry to terminate.  The
structure contents are actually filled in by a subordinate function,
"gethostent", retrieving data from the /etc/hosts file. 

Just as a quick review "char **xx" is a pointer the address of a
character pointer.  Recall that the familiar "argv" parameter commonly
used in "main declarations" is coded in either of two ways:

char **argv; /* a pointer to a pointer of a string */

char *argv[]; /* an array of pointers to strings */


The sample program takes a host name as input and prints the ip address. 

"inet_ntoa" is a library function to print the ip address in the format
xx.xx.xx.xx. 



/***********************************************************
*
*     Sample gethostbyname program
*
*   building program:
*
*              System v  cc -o ptrhost ptrhost.c -linet
*
*              Solaris   cc -o ptrhost ptrhost.c -lnsl
*
*   program invocation:
*
*             ptrhost name
*
*   output:
*             ip address is xx.xx.xx.xx
*
*
************************************************************/
#include 
#include 
#include 
#include 
#include 
#include 
main(argc,argv)
int argc;
char **argv;                     /* alternate *argv[]           */
{
   struct in_addr *ip_ptr;       /* point at ip addresses       */
                                 /* this is really a ulong      */

   struct hostent *ptr_hostent;  /* point at returned structure */
   extern int errno;
   char   *h_ptr;                /* point at host name          */

   h_ptr = *++argv;
/*
* fill hostent struct
*/

   ptr_hostent = gethostbyname(h_ptr);  /* alternate
                                         gethostbyname(argv[1]) */

   if (ptr_hostent == NULL)
   {
          fprintf(stderr,"gethostbyname failed %d\n",errno);
          exit(-1);
   }
   /*
   *
   * point at start of ip addresses
   *
   */


      ip_ptr = (struct in_addr *) *ptr_hostent->h_addr_list;

   /*
   *
   *  print ip address in format xx.xx.xx.xx
   *
   */
   printf("ip address is %s\n",inet_ntoa(*ip_ptr));
}


DATE APPROVED: 09/18/95