Очевидно, что этот бит является опечаткой:
возможно использовать синтаксис двойных двоеточий для представления одного или нескольких блоков с нулями.1: 2 :: 6: 7 эквивалентно 1: 2: 3: 4: 5: 6: 7: 8.
1:2::6:7
означает 1:2:0:0:0:0:6:7
.
Я не слышал этого раньше:
двойное двоеточие может [не отображаться] в точечном адресе ip4.
Но я создал тестовую программу, и, похоже,подтвердите это.
$ ./testipv6 0:0:0:0:0:0:192.168.0.1
0:0:0:0:0:0:192.168.0.1: OK
$ ./testipv6 0:0:0:0:0:0:192.168::1
0:0:0:0:0:0:192.168::1: ERROR
В остальном я думаю, что все, что вы сказали, в порядке.
testipv6.c
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int convert(const char *addr)
{
struct in6_addr dst;
return inet_pton(AF_INET6, addr, (void *)&dst);
}
int main(int argc, char **argv)
{
if (argc == 1) {
fprintf(stderr, "Usage: testipv6 <addr>\n");
exit(2);
}
while (argc > 1) {
argc--, argv++;
const char *addr = argv[0];
if (convert(addr)) {
printf("%s: OK\n", addr);
} else {
printf("%s: ERROR\n", addr);
}
}
}