2012-06-13 18 views
0

这是一个我没有完全理解的语句。了解一个C socket指令

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

这是否意味着:

  1. 我把hphp->h_addr
  2. 这一切struct in_addr*类型的h_addr
  3. 类型转换已经被复制到s_addr

因此serv_addr.sin_addr.s_addr包含选择主机的主机名和ip地址。
这是正确的吗?
(PS:惠普是struct hostent *hp ; hp=gethostbyname(argv[1]);

+0

'gethostbyname()'已被弃用,您可以考虑使用'getaddrinfo()'来代替。 – alk

+0

我知道,我读过这个,但我需要一个简单的实现,所以我会在(近)未来:)学习getaddrinfo(它更复杂):) – polslinux

回答

3

您需要了解the arrow operator

从本质上讲,当你有一个指向该结构的指针时,它允许你访问结构的成员。

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

+0

非常感谢:)我了解了我的BIG错误: ) – polslinux

2

(1)是错误的。 hp->h_addr(*hp).h_addr的简称。这是一个解除引用和一个成员选择。

在英语中,人们可能会说“复制hph_addrserv_addrs_addr。这需要演员。

+0

也谢谢你,你也帮了我很多:) – polslinux