这些其他领域何时使用?

时间:2017-03-06 01:07:54

标签: c sockets

我正在梳理一个简单的客户端套接字程序,以了解它是如何工作的。

当我致电gethostbyname()时,它会填充我hostent结构中的各个字段。但是,当我将h_addr复制到h_length结构时,使用的唯一字段是h_addrsockaddr_in。何时使用其他字段,例如h_nameh_aliases

我还有一个次要问题,我也会在这里投入。

当我们将sin_family中的sockaddr_in字段设置为AF_INET(或我们正在使用的任何值)时,为什么我们不做从我们的hostent结构h_addrtype复制,因为它已经存在?

(顺便说一下,我在网上看过gethostbyname()已经过时了,所以不要太在意我的例子中使用它。)

1 个答案:

答案 0 :(得分:0)

在线manual page for gethostbyname解释说:

  • h_name字段用作"主机的官方名称"。
  • h_aliases字段用作"别名列表"。

但是用我自己的话来说......

我使用h_name字段来获取主机的正确名称,因为调用gethostbyname的名称可能是列出的别名之一。或者,我可以使用h_aliases字段,如果我想知道可以使用哪些其他名称来引用相同的hostent结构。

例如,公司可能有一项政策,即所有联网计算机必须具有美国州名称的正式名称。在命名一台将成为该公司网络服务器的计算机之前,这可能正常。 Alabama可能是一个很好的状态和一台优秀的计算机,但没有人会期望必须使用类似{{1}的网址来访问公司的网络服务器}。相反,网址更常见的是https://Alabama.thegreatcompany.com/https://www.thegreatcompany.com/之前的www而不是thegreatcompany.com)。解决此问题的方法是为Alabama的{​​{1}}主机使用别名。这种方式Alabama出现在www字段和Alabama字段中的h_name

关于次要问题,您可以使用www结构中的信息,但您的客户端将使用获取的信息进行连接,而不是使用通过其他方式获取的信息进行连接。两者都没有任何错误。例如,您的h_aliases信息来自不可靠的来源。在这种情况下,可能最好将该信息硬编码到客户端套接字程序中。