2010-04-09 78 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成員。

我希望這可以解釋你的生產線正在發生什麼。