     internal func _resolveCurrent() {
 #if os(Android)
         return
+#elseif os(Windows)
+        var ulResult: ULONG = 0
+
+        var ulSize: ULONG = 0
+        var arAdapterInfo: UnsafeMutablePointer<IP_ADAPTER_ADDRESSES>?
+
+        var buffer: UnsafeMutablePointer<Int8> =
+            UnsafeMutablePointer<Int8>.allocate(capacity: Int(NI_MAXHOST))
+        defer { buffer.deallocate() }
+
+        ulResult = GetAdapterAddresses(AF_UNSPEC, 0, nil, nil, &ulSize)
+        arAdapterInfo = UnsafeMutablePointer<IP_ADAPTER_ADDRESSES>
+                            .allocate(capacity: ulSize / MemoryLayout<IP_ADAPTER_ADDRESSES>.size)
+        defer { arAdapterInfo.deallocate() }
+
+        ulResult = GetAdapterAddresses(AF_UNSPEC, 0, nil, &arAdapterInfo, &ulSize)
+        while arAdapterInfo != nil {
+          var address = arAdapterInfo.FirstUnicastAddress
+          while address != nil {
+            switch address.lpSockaddr.sa_family {
+            case AF_INET, AF_INET6:
+              if GetNameInfoW(address.lpSockaddr, address.iSockaddrLength,
+                              buffer, socklen_t(NI_MAXHOST), nil, 0,
+                              NI_NUMERICHOST) == 0 {
+                _addresses.append(String(cString: buffer))
+              }
+            default: break
+            }
+            address = address.Next
+          }
+          arAdapterInfo = arAdapterInfo.Next
+        }
+        _resolved = true
 #else
         var ifaddr: UnsafeMutablePointer<ifaddrs>? = nil
         if getifaddrs(&ifaddr) != 0 {

    }
    
    static internal func currentHostName() -> String {
        let hname = UnsafeMutablePointer<Int8>.allocate(capacity: Int(NI_MAXHOST))
        defer {
            hname.deallocate()

            return "localhost"
        }
        return String(cString: hname)
#endif
    }
    
    open class func current() -> Host {
