When printing all addresses of LivePacketDevice.AllLocalMachine I've noticed that the IPv6 address is displayed as:
where is should be:
I think the problem might be in the following function:
sockaddr_in6* ipV6Address = (struct sockaddr_in6 *)address;
unsigned long *value = reinterpret_cast<unsigned long *>(ipV6Address->sin6_addr.u.Byte);
_address = IpV6Address(UInt128(*value, *(value+1)));
where UInt128's constructor expects 2 parameters of 64-bit length, but in fact receives 2 parameters of 32-bit length which are implicitly casted to c# ulong.
When looking at ipV6Address variable it seems it holds the correct value.