3 This file is part of libmspnet
4 Copyright © 2011 Mikkosoft Productions, Mikko Rasa
5 Distributed under the LGPL
8 #include <msp/core/except.h>
9 #include <msp/strings/formatter.h>
17 Inet6Addr::Inet6Addr():
22 Inet6Addr::Inet6Addr(const sockaddr_in6 &sai6):
27 Inet6Addr::Inet6Addr(unsigned char a[16], in_port_t p):
30 std::copy(a, a+16, addr.s6_addr);
33 string Inet6Addr::str() const
36 for(unsigned i=0; i<16; i+=2)
38 unsigned short part = (addr.s6_addr[i]<<8) | addr.s6_addr[i+1];
41 result += format("%x", part);
45 result += format(":%d", ntohs(port));
50 unsigned Inet6Addr::fill_sockaddr(sockaddr &) const
52 throw Exception("Inet6Addr doesn't fit in struct sockaddr");
55 unsigned Inet6Addr::fill_sockaddr(sockaddr_storage &sa) const
57 sockaddr_in6 &sai6 = reinterpret_cast<sockaddr_in6 &>(sa);
58 sai6.sin6_family = AF_INET6;
59 sai6.sin6_port = port;
60 sai6.sin6_addr = addr;
61 sai6.sin6_flowinfo = 0;
62 sai6.sin6_scope_id = 0;
64 return sizeof(sockaddr_in6);