2012-07-10 27 views
12

tôi gặp phải ảnh chụp đoạn mã sau:Máy chủ cấu trúc có trường "h_addr" không?

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

tôi khá bối rối bởi những tuyên bố mới nhất, việc kê khai của struct hostent là như thế này:

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 */ 
}; 

Nó không có một trường có tên là " h_addr ", nhưng mã đã làm có thể biên dịch, bất cứ ai có thể cho tôi biết lý do tại sao? cảm ơn.

Trả lời

16

Bạn bỏ lỡ chút này ngay dưới nó:

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

Vì vậy, không, không có vấn đề.

+1

Cảm ơn ..... chút xấu hổ .... – wangshuaijie

2

Trong GNU's documentation page họ nói

"Nhớ lại rằng tổ chức có thể được kết nối với nhiều mạng và có địa chỉ khác nhau trên mỗi một"

họ cũng cung cấp một h_addr mà chỉ là người đầu tiên phần tử của véc tơ h_addr_list.

Các vấn đề liên quan