How to set sockaddr_in6::sin6_addr byte order to network byte order?
The s6_addr
member of struct in6_addr
is defined as:
uint8_t s6_addr[16];
Since it is an array of uint8_t
, rather than being a single 128-bit integer type, the issue of endianness does not arise: you simply copy from your source uint8_t [16]
array to the destination. For example, to copy in the address 2001:888:0:2:0:0:0:2
you would use:
static const uint8_t myaddr[16] = { 0x20, 0x01, 0x08, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 };
memcpy(addr.sin6_addr.s6_addr, myaddr, sizeof myaddr);