|
[PHP]
int
GetHostipStr (char *hostdns, char *hostip)
{
int i;
unsigned char IP[4];
struct hostent *host;
if (!(host = gethostbyname (hostdns)))
{
printf ("gethostbyname:%s!\n", hostdns);
return (S_ERROR);
}
for (i = 0; i < 4; i++)
IP = (host->h_addr);
sprintf (hostip, "%d.%d.%d.%d", IP[0], IP[1], IP[2], IP[3]);
return (S_OK);
}
[/PHP]
我看UNP上说hostent的返回是个结构指针
struct hostent{
char * h_name;
char ** h_aliases;
int h_addrtype;
int h_lenght;
char ** h_addr_list;
}
#define h_addr h_addr_list[0]
我不明白为什么上面的代码中
IP = (host->h_addr);
sprintf (hostip, "%d.%d.%d.%d", IP[0], IP[1], IP[2], IP[3]);
我感觉host->h_addr应该里面的内容赋予ip对吧。但是h_addr里的东西应该是个指针
这个指针指向的是in_addr{}这么个结构
sprintf (hostip, "%d.%d.%d.%d", IP[0], IP[1], IP[2], IP[3]);
IP[0]之类的是传递给函数的指针,“打印”指针指向的东西
然后我去查了in_add 结构
struct in_addr{
in_addr_t s_addr;
}
解释说in_addr_t ipv4地址,一般是uint32_t
到这里我就有点糊涂了sprintf (hostip, "%d.%d.%d.%d", IP[0], IP[1], IP[2], IP[3])这个到底把什么东西打进hostip里?
UNP中文版208页的结构,h_add_list是指向一个地址段,那么IP = (host->h_addr),是不是吧这个host->h_addr[0]所指的第一个单元的内容给ip[0]?然后把host->h_addr[1]单元的内容给ip[1],以次类推? |
|