/*---------------------------------------------------------------------+ | Copyright (c) 1995, SAS Institute Inc. | | Unpublished - All Rights Reserved | | S A S / C S A M P L E | | | | NAME: RESINIT | | LANGUAGE: C | | PURPOSE: This program demonstrates resolver processing and | | the gethostbyname() function. gethostbyname() will | | return a pointer to a structure, hostent, containing | | host information, including the IP address. | | RESINIT enables diagnostic information, which allows | | users to trace resolver/nameserver processing. Refer to| | RFC's 1034 and 1035 for details on domain name | | processing. | | Additional details on these socket functions may be | | found in the SAS/C Library Reference Vol 2, Third | | Edition, Release 6.00. | | NOTES: gethostbyname() will use either local host tables or | | a nameserver, based on local configuration options. | | Refer to the SAS/C Library Reference Vol 2, | | Third Edition, Release 6.00, Network Administration | | chapter. | | MVS - | | COMPILE, LINK, EXECUTE: SUBMIT prefix.SAMPLE.AUX(LC370CLG) | | NOTES: "prefix" is the SAS/C installation defined high-level | | qualifier. | | NOTES: on the EXEC statement add a: ,PARM.C='bi(1)' | | NOTES: on the EXEC statement add a: ,PARM.GO='host_name' | | Where "host_name" is the name to be resolved. | | TSO - | | COMPILE: LC370 CLIST | | LINK: CLK370 CLIST | | EXECUTE: CALL 'your.load.lib(RESINIT)' 'host_name' | | Where "host_name" is the name to be resolved. | | NOTES: use the "bitfield(1)" option for LC370 | | CMS - | | COMPILE: LC370 | | LINK: CLINK RESINIT (GENMOD | | EXECUTE: RESINIT host_name | | Where "host_name" is the name to be resolved. | | NOTES: use the "bitfield(1)" option for LC370 | +---------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include main(int argc, char *argv[]) { struct hostent *hp; struct in_addr ip_addr; /*---------------------------------------------------------------------+ | Verify a "host_name" parameter was supplied. | +---------------------------------------------------------------------*/ if (argc < 2 || *argv[1] == '\0') { printf("host_name parameter was not supplied, exiting.\n"); exit(EXIT_FAILURE); } /*---------------------------------------------------------------------+ | res_init() and the _res.options enable resolver tracing when using a | | nameserver. RES_DEBUG enables diagnostic messages. RES_USEVC | | specifies a TCP vs. UDP connection to the nameserver. | | NOTE: If host tables are used for resolver processing, no additional | | diagnostic information is provided. | +---------------------------------------------------------------------*/ res_init(); _res.options |= (RES_DEBUG|RES_USEVC); /*---------------------------------------------------------------------+ | call gethostbyname() with a host name. gethostbyname() returns a | | pointer to a hostent struct or NULL. | +---------------------------------------------------------------------*/ hp = gethostbyname(argv[1]); if (!hp) { printf("%s was not resolved\n",argv[1]); exit(EXIT_FAILURE); } /*---------------------------------------------------------------------+ | move h_addr to ip_addr. This enables conversion to a form suitable | | for printing with the inet_ntoa() function. | +---------------------------------------------------------------------*/ ip_addr = *(struct in_addr *)(hp->h_addr); printf("Hostname: %s, was resolved to: %s\n", argv[1],inet_ntoa(ip_addr)); exit(EXIT_SUCCESS); }