home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / bootpd-2.zip / TRYGETIF.C < prev    next >
C/C++ Source or Header  |  1995-02-16  |  1KB  |  73 lines

  1. /*
  2.  * trygetif.c - test program for getif.c
  3.  */
  4.  
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7.  
  8. #if defined(SUNOS) || defined(SVR4)
  9. #include <sys/sockio.h>
  10. #endif
  11.  
  12. #ifdef _AIX32
  13. #include <sys/time.h>    /* for struct timeval in net/if.h */
  14. #endif
  15. #include <net/if.h>                /* for struct ifreq */
  16. #include <netinet/in.h>
  17. #include <arpa/inet.h>            /* inet_ntoa */
  18.  
  19. #include <netdb.h>
  20. #include <stdio.h>
  21. #include <ctype.h>
  22. #include <errno.h>
  23.  
  24. #include "getif.h"
  25.  
  26. int debug = 0;
  27. char *progname;
  28.  
  29. void
  30. main(argc, argv)
  31.     int argc;
  32.     char **argv;
  33. {
  34.     struct hostent *hep;
  35.     struct sockaddr_in *sip;    /* Interface address */
  36.     struct ifreq *ifr;
  37.     struct in_addr dst_addr;
  38.     struct in_addr *dap;
  39.     int s;
  40.  
  41.     progname = argv[0];            /* for report */
  42.  
  43.     dap = NULL;
  44.     if (argc > 1) {
  45.         dap = &dst_addr;
  46.         if (isdigit(argv[1][0]))
  47.             dst_addr.s_addr = inet_addr(argv[1]);
  48.         else {
  49.             hep = gethostbyname(argv[1]);
  50.             if (!hep) {
  51.                 printf("gethostbyname(%s)\n", argv[1]);
  52.                 exit(1);
  53.             }
  54.             memcpy(&dst_addr, hep->h_addr, sizeof(dst_addr));
  55.         }
  56.     }
  57.     s = socket(AF_INET, SOCK_DGRAM, 0);
  58.     if (s < 0) {
  59.         perror("socket open");
  60.         exit(1);
  61.     }
  62.     ifr = getif(s, dap);
  63.     if (!ifr) {
  64.         printf("no interface for address\n");
  65.         exit(1);
  66.     }
  67.     printf("Intf-name:%s\n", ifr->ifr_name);
  68.     sip = (struct sockaddr_in *) &(ifr->ifr_addr);
  69.     printf("Intf-addr:%s\n", inet_ntoa(sip->sin_addr));
  70.  
  71.     exit(0);
  72. }
  73.