Согласно документации , найденной здесь , вы передаете неправильные значения:
gethostbyaddr()
принимает struct in_addr
или struct in6_addr
и выводит вам соответствующее имя хоста (если оно есть), так что это своего рода обратное gethostbyname()
. Что касается параметров, даже если addr является char*
, вы на самом деле хотите передать указатель на структуру in_addr
. len
должно быть sizeof(struct in_addr)
, а тип должен быть AF_INET
.
Вот пример кода с указанного сайта:
struct hostent *he;
struct in_addr ipv4addr;
struct in6_addr ipv6addr;
inet_pton(AF_INET, "192.0.2.34", &ipv4addr);
he = gethostbyaddr(&ipv4addr, sizeof ipv4addr, AF_INET);
printf("Host name: %s\n", he->h_name);
inet_pton(AF_INET6, "2001:db8:63b3:1::beef", &ipv6addr);
he = gethostbyaddr(&ipv6addr, sizeof ipv6addr, AF_INET6);
printf("Host name: %s\n", he->h_name);