2010-04-09 73 views

回答

8

需要hp->h_addr,并将其转换为struct in_addr*。演员阵容可能有不同的原因。也许hp->h_addrvoid*并且需要转换以告诉编译器它应该使用什么类型来发现s_addr。它也可以是具有一个in_addr作为其第一个成员

struct in_addr { 
    struct saddr_t s_addr; 
}; 

struct socket { 
    struct in_addr addr; 
}; 

struct server { 
    struct socket *h_addr; 
}; 

server *hp; 

然后,铸造因为其地址有在开始时in_addrsocket*in_addr*将是有效的另一个结构。演员投入后,会员s_addr被访问。这些类型在POSIX下的网络编程中很常见,而且看起来不像我上面的例子,但上面的情况可能就在眼前。

7

它的铸造结构体成员H_ADDR为结构组in_addr *,然后引用的新铸造的s_addr成员组in_addr

1

这把hp->h_addr,就像它指向struct in_addr,然后尝试访问s_addr的那struct in_addr

0

构件设置含有可变销 与放置在字段s_addr值结构的一下,域sin_addr其位于该地址指向由包含在VA结构的H_ADDR场的场s_addr马力可变结构

换句话说

采取ADDRES从马力H_ADDR的值,并假设其指向(一个in_addr)和场s_addr复制到pin.sin_addr

0

的approriate字段从内OT:

  • hp->h_haddr获得由hp指向的结构的h_addr成员。
  • (struct in_addr *)将此h_addr值转换为指向in_addr结构的指针。
  • ->s_addr获取它指向的in_addr结构的s_addr成员。

因此,它得到该结构的s_addr构件指向该结构的h_addr构件通过hp指向。 (hph_addr都是指针)

然后它将此值分配给pin.sin_addr.s_addr

0

(HP-> H_ADDR):从指针马力得到H_ADDR场

((结构组in_addr *)(HP-> H_ADDR)):把结果从上面的语句的指针in_addr结构

- > s_addr:从上述语句的结果指针中获取s_addr字段

=:赋值。

4

HP-> a_addr浇铸的指针结构类型一个in_addr的,一个in_addr已字段中指定诸如s_addr等

Unix套接字可以处理不同类型的网络寻址,网络寻址是只是其中之一,因此在访问各个字段时必须将套接字地址描述符转换为正确的地址描述符。

例如,sockaddr_in6处理与sockaddr_in不同的IPv6地址。

1

马力为结构hostent型指针,它是最有可能由一个“的gethostbyname()”呼叫返回。它有一个名为h_addr的成员,它实际上是h_addr_list [0]的一个别名(它包含为您的名称查询检索到的第一个IP地址)。在这种情况下;您将此IP地址传递给您的结构sockaddr_in类型变量“pin”。它有一个名为sin_addr的成员,其类型为struct in_addr

struct in_addr {unsigned long int s_addr; }

要完成赋值,应该对h_addr进行类型转换以构造in_addr ptr(通常是char *),然后访问其s_addr成员。

我希望这可以解释你的生产线正在发生什么。