В документации по использованию сокетов есть описание структуры hostent
: https://www.gnu.org/software/libc/manual/html_node/Host-Names.html#Host-Names
Для поля h_addr_list
говорится, что это вектор, оканчивающийся нулевым указателем. * 1006Итак, я пытаюсь сделать следующее:
struct in_addr *addr = (struct in_addr *)hostent->h_addr_list[0];
while (addr != NULL) {
// ...
addr++;
}
Я ожидал, что переменная addr
будет NULL, когда она достигнет последнего элемента в векторе, потому что этот элемент должен быть указателем NULL.
Но на практике этого не происходит.addr
никогда не становится NULL
.
// hostent->h_addr_list contains 4 meaningful elements
struct in_addr *addr = (struct in_addr *)hostent->h_addr_list[0];
addr++;
addr++;
addr++;
addr == (struct in_addr *)hostent->h_addr_list[3]; // true
addr++;
// here I expected addr to be NULL to terminate the vector, but...
NULL == addr; // false!!!
addr == (struct in_addr *)hostent->h_addr_list[4]; // false
// just to check that it actually NULL terminated
NULL == hostent->h_addr_list[4]; // true
addr = (struct in_addr *)hostent->h_addr_list[4];
NULL == addr; // true
Итак, почему это так?
Что я делаю не так?
Спасибо.