Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

netdb.h

  • 引用

    #include <netdb.h>
    
    
  • 域名转换为ip地址结构体

    struct hostent* gethostbyname(const char* hostname);
    
    • 返回的结构体
      struct hostent {
          char* h_name;
          char** h_aliases;
          int h_addrtype;
          int h_length;
          char** h_addr_list
      }
      
      • h_addrtype ip地址类型
        • 若是IPv4,则存有AF_INET
      • h_length ip地址长度
        • 若是IPv4,则是4,若是IPv6,则是16
      • h_addr_list 一连串ip地址的指针
        • 其中每个元素也是指针,指向32位整型ip值,最后一个元素为NULL
        • 提取为 点分十进值
          host = gethostbyname("xxx")
          for (int i = 0; host->h_addr_list[i]; i++) {
              printf("IP addr %d: %s \n", i + 1, inet_ntoa(*(struct inaddr*)host->h_addr_list[i]));
          }