2012-07-10 5 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 */ 

はありませんので、問題はありません。 GNU's documentation page

+1

ありがとう.....少し恥ずかしい.... – wangshuaijie

2

彼らはまた、単に最初であるh_addrを提供

を「ホストが複数のネットワークに接続されており、それぞれ1に異なるアドレスを持っている可能性があることを思い出してください」

を語りますベクターの要素h_addr_list

関連する問題