2012-07-10 65 views
12

我遇到下面的代碼快照:struct hostent是否有字段「h_addr」?

struct hostent *hp; 
hp = my_gethostbyname(localhost); 
    if (hp == NULL) { 
     ls_syslog(LOG_ERR, I18N_FUNC_FAIL, fname, "my_gethostbyname()"); 
     return -1; 
    } 
    strcpy(localhost, hp->h_name); 

    memcpy(&addr, hp->h_addr, hp->h_length); 

我的最後一條語句比較混亂,結構hostent的聲明是這樣的:

struct hostent { 
    char *h_name;  /* official name of host */ 
    char **h_aliases; /* alias list */ 
    int h_addrtype;  /* host address type */ 
    int h_length;  /* length of address */ 
    char **h_addr_list; /* list of addresses */ 
}; 

它沒有一場名爲「 h_addr「,但代碼確實可以編譯,誰能告訴我爲什麼?謝謝。

回答

16

你錯過了這個位權下它:

#define h_addr h_addr_list[0] /* for backward compatibility */ 

所以,不,是沒有問題的。

+1

謝謝.....小尷尬.... – wangshuaijie 2012-07-10 02:37:32

2

GNU's documentation page他們說

「回想一下,主機可以連接到多個網絡,並有不同的地址上的每一個」

它們還提供了h_addr這只是第一元素的矢量h_addr_list

相關問題