         return lhs.bytes == rhs.bytes
     }
 
-    static let any = in6_addr(bytes: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
-    static let loopback = in6_addr(bytes: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1])
+    public static let any = in6_addr(bytes: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
+    public static let loopback = in6_addr(bytes: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1])
 
     /**
         Initialise with either 4- or 16-byte address
         4-byte addresses are converted to IPv4-mapped IPv6 representation
     */
-    init(bytes: [UInt8]) {
+    public init(bytes: [UInt8]) {
         self.init()
         self.bytes = bytes
     }

    /**
        Initialise with IPv4 or IPv6 string, eg. "123.123.123.123" or "2001:db8:85a3::8a2e:370:7334"
    */
    init?(string: String) {
        let cstr = Array(string.utf8CString)
        var addr6 = in6_addr()
        if inet_pton(AF_INET6, cstr, &addr6) == 1 {

        #endif
    }

    public init(addr: in6_addr, port: UInt16, flowinfo: UInt32 = 0, scope_id: UInt32 = 0) {
        self.init()
        self.sin6_addr = addr
        self.port = port
        self.flowinfo = flowinfo
        self.scope_id = scope_id
    }

    /**
        Initialise from IPv4 sockaddr structure, converting to IPv4-mapped IPv6
    */
    public init(sa: sockaddr_in) {
        let addr = in6_addr(sa.sin_addr)
        self.init(addr: addr, port: sa.sin_port.bigEndian)
    }

