c/c++语言开发共享为什么struct hostent中的h_addr_list是char **而不是struct in_addr **?

我是网络编程的新手。 以下结构定义让我很困惑。 这里h_addr_list是一个定义为字符串数组,但它用于存储in_addr结构的数组。 为什么它没有定义为struct in_addr **h_addr_list而不是char **h_addr_list

 struct hostent { char *h_name; /* Official domain name of host */ char **h_aliases; /* Null-terminated array of domain names */ int h_addrtype; /* Host address type (AF_INET) */ int h_length; /* Length of an address, in bytes */ char **h_addr_list; /* Null-terminated array of in_addr structs */ }; struct in_addr { unsigned int s_addr; /* Network byte order (big-endian) */ }; 

    结构定义可以追溯到C支持void *之前的时代(或者完全void ,或原型)。 在那些日子里, char *是’通用指针’。 这解释了网络function接口的一些奇怪之处。

    它还可以追溯到有许多不同的网络系统(IPX / SPX,SNA,TCP / IP,……)的时代。 目前,TCP / IP占主导地位,但即使是现在,您也可以返回一个IPv4数组或一组IPv6地址,因此指定struct in_addrstruct in6_addr会导致问题。

    目的是你有一个指向适当结构类型的指针数组。 如今,它将写成void **h_addr_list – 一个void *数组。 但是,当首次定义结构时,此选项不可用,其余的是历史记录(如果可以避免,则在标准化之后不会更改界面)。

    在创建结构时,创建者不确定AF_INET是否将成为获胜的地址类型。

    如果h_addrtype不是AF_INET,该怎么办? 然后h_addr_list将包含非struct in_addr地址。

    现在,几十年后,我们发现IPV4地址已经用完。 很快, struct inaddr将被IPV6地址越来越多地取代。

    需要了解更多c/c++开发分享为什么struct hostent中的h_addr_list是char **而不是struct in_addr **?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享为什么struct hostent中的h_addr_list是char **而不是struct in_addr **?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/978932.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐