getaddrinfo - возвращаемые данные об IP адресе
Подскажите пожалуйста, вот делаю вызов функции getaddinfo из Winsock:
char my_char_HOST[] = "ru.stackoverflow.com";
char my_char_NAME_SERVICE[] = "https";
ADDRINFOA my_ADDRINFOA;
memset(&my_ADDRINFOA, 0, sizeof(my_ADDRINFOA));
my_ADDRINFOA.ai_family = AF_INET;
my_ADDRINFOA.ai_socktype = SOCK_STREAM;
struct addrinfo *servinfo; // Сюда getaddrinfo - заносит возвращенную информацию
INT my_getaddrinfo = getaddrinfo(my_char_HOST, my_char_NAME_SERVICE, &my_ADDRINFOA, &servinfo);
cout << "my_getaddrinfo:" << my_getaddrinfo<< endl; //Равно 0 - завершается успешно
Все работает, getaddrinfo завершается без ошибок, вывожу на консоль заполненные функцией данные об IP в указателе на структуру servinfo(sockaddr) в параметре sa_data:
for (int i = 0; i < 14; i++)
{
cout << "ai_addr_sa_data:" << (int)(servinfo->ai_addr->sa_data[i]) << endl;
}
Вот что выводится:
ai_addr_sa_data:1 //?
ai_addr_sa_data:-69 //?
ai_addr_sa_data:-105 //(это переполненный char числа 151)
ai_addr_sa_data:101
ai_addr_sa_data:-127 //(это переполненный char числа 193)
ai_addr_sa_data:69
IP адрес ru.stackoverflow.com - 151.101.193.69, то есть getaddrinfo правильно вернула значение, но вопрос, что за значения в первых двух байтах - 1 и -69 ??? Причем они всегда постоянны, то есть чтобы я не запрашивал - google, facebook, mail или stackoverflow - первые два байта возвращаются именно с этими значениями.
Ответы (1 шт):
sockaddr указывает на структуру sockaddr_in,в которой первые два байта - это номер порта. Так что если вы воспользуетесь этой структурой, вы увидите там 443, записанное в сетевом порядке байт.