Мне известен этот аналогичный вопрос , но ответы не имеют смысла и, возможно, связаны с другой проблемой.
В моем приложении iOS я подключаюсь к серверу, используя CFSockets и wi sh, чтобы показать удаленный адрес сервера. При использовании IPv4 он работает, как и ожидалось, но есть странные результаты с IPv6, где сетевой префикс адреса правильный, но биты хоста совершенно разные.
int sock_fd = <...> // Assume I already have the fd
struct sockaddr addr;
socklen_t addr_len = sizeof(addr);
getpeername(sock_fd, &addr, &addr_len);
char addressString[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &((struct sockaddr_in6 *)&addr)->sin6_addr, addressString, INET6_ADDRSTRLEN);
То, что я ожидал, было 2607:f2f8:a4c8::2
, но я получаю адрес с правильным префиксом сети, но каждый раз с разными битами хоста, например:
vvvvvvvvvvvvvvvvvvvv Random?
2607:f2f8:a4c8:0:c400:13b0:f6c5:afa
^^^^^^^^^^^^^^ Correct