理解C套接字指令

时间:2012-06-13 16:50:49

标签: c sockets struct

这是我尚未完全理解的陈述。

serv_addr.sin_addr.s_addr = ((struct in_addr*)(hp->h_addr)) -> s_addr;

这是否意味着:

  1. 我将hp放入h_addr
  2. struct in_addr*
  3. 类型hp->h_addr的类型转换
  4. 所有这些都已复制到s_addr
  5. 所以serv_addr.sin_addr.s_addr包含主机名和选择主机的IP地址。
    这是对的吗?
    (PS:hp是struct hostent *hp ; hp=gethostbyname(argv[1]);

2 个答案:

答案 0 :(得分:3)

您需要了解the arrow operator

基本上,当你有一个指向该结构的指针时,它可以让你访问结构的成员。

因此,hp->h_addr可让您访问h_addr指向hostent结构的hp成员。然后,您将该成员投射到in_addr *并解除引用,以便您可以访问s_addr结构的in_addr成员。

答案 1 :(得分:2)

(1)错了。 hp->h_addr(*hp).h_addr的缩写。这是一个解除引用加成员选择。

在英语中,有人可能会说“将hp的{​​{1}}复制到h_addr的{​​{1}}。这需要演员。”