我遇到了以下代码快照:

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);

我对最后一条语句感到困惑,struct 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”的字段,但是代码确实可以编译,有人可以告诉我为什么吗?谢谢。

最佳答案

您错过了下面的这一点:

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

所以不,没有问题。

关于linux - struct hostent是否有一个 “h_addr”字段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11405819/

10-13 03:32