Я пытаюсь получить IPv4-адрес от имени хоста, поэтому я подумал, что могу использовать gethostbyname () для этой цели.Это работает довольно хорошо, но есть одна проблема: он не перестает работать, когда ему передается несуществующее имя хоста.
Вот код:
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("%p\n", gethostbyname("fkldsjflkasdjflkajsdflkjasdf.com"));
return 0;
}
В Ubuntu вывод:
0x7fb891c1b8a0
Почему это не NULL
?
* РЕДАКТИРОВАТЬ *
Вот более полный пример, который выводит результат:
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char **argv)
{
struct hostent *hp = gethostbyname("fkldsjflkasdjflkajsdflkjasdf.com");
printf("%s %d %d %p\n", hp->h_name, hp->h_addrtype, hp->h_length, hp->h_addr_list);
printf("%s\n", inet_ntoa(*((struct in_addr *) hp->h_addr)));
return 0;
}
Результат таков:
fkldsjflkasdjflkajsdflkjasdf.com 2 4 0x1c141a0
62.138.238.45
AsВы можете видеть, я даже могу получить IP-адрес для несуществующего имени хоста!Понятия не имею, как это возможно ...