本机可能会有多个IP,下面这段程序可以获得本机IP:
struct hostent *h;
char host[100];
int i;
gethostname(host, 100);
if ((h = gethostbyname(host)) == NULL) {
printf("Error : %s!\n", hstrerror(h_errno));
return;
};
printf("Default IP: %s\n", inet_ntoa (*((struct in_addr
*)h->h_addr)));
for (i = 0; i< h->h_length / sizeof(int); i++) {
printf("IP %d : %s\n", i+1, inet_ntoa (*((struct in_addr
*)h->h_addr_list[i])));
};
需要注意的是,h->h_addr实际上就是h->h_addr_list[0],是为了向前兼容而保留的。
DNS操作时的错误处理与普通程序不同,gethostbyname通过设置h_errno代表出错号,对应的错误函数有hstrerror()和herror(),分别对应于strerror()和perror()这两个普通的错误函数。