Вопрос

Я использовал getaddrinfo для поиска адресов сокетов для основных команд сокетов.Однако в последнее время он возвращает мне адреса фиктивных IP-адресов, которые я нашел с помощью inet_ntop.Я попробовал свой код, а также тот, который представлен в Руководство Биджа, и оба они дают одинаковые результаты.Вот код:

struct addrinfo hints, *info;
int status;

memset(&hints, 0, sizeof hints);

hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;

if(status = getaddrinfo(address, port, &hints, &info)) {
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
}

char ip4[INET_ADDRSTRLEN];
inet_ntop(AF_INET, info->ai_addr, ip4, INET_ADDRSTRLEN);

std::cout<<ip4<<std::endl;

Независимо от того, какой адрес я использую, он всегда дает мне IP вида

16.2.x.y

где 256*x + y равно номеру порта.Кто-нибудь когда-нибудь видел, как это происходит, или может ли кто-нибудь догадаться, почему он дает мне это?

Это было полезно?

Решение

Разве ты не должен проходить мимо?

((sockaddr_in const *)info->ai_addr)->sin_addr

к inet_ntop?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top