@@ -94,40 +94,50 @@ open class Host: NSObject {
94
94
95
95
internal func _resolveCurrent( ) {
96
96
#if os(Windows)
97
+ var szAddress : [ WCHAR ] =
98
+ Array < WCHAR > ( repeating: 0 , count: Int ( NI_MAXHOST) )
99
+
97
100
var ulSize : ULONG = 0
98
101
var ulResult : ULONG =
99
102
GetAdaptersAddresses ( ULONG ( AF_UNSPEC) , 0 , nil , nil , & ulSize)
100
103
101
- let arAdapterInfo : UnsafeMutablePointer < IP_ADAPTER_ADDRESSES > =
102
- UnsafeMutablePointer< IP_ADAPTER_ADDRESSES_LH>
103
- . allocate( capacity: Int ( ulSize) / MemoryLayout< IP_ADAPTER_ADDRESSES> . size)
104
- defer { arAdapterInfo. deallocate ( ) }
104
+ var arAdapters : UnsafeMutableRawPointer =
105
+ UnsafeMutableRawPointer . allocate ( byteCount: Int ( ulSize) ,
106
+ alignment: 1 )
107
+ defer { arAdapters. deallocate ( ) }
108
+
109
+ ulResult = GetAdaptersAddresses ( ULONG ( AF_UNSPEC) , 0 , nil ,
110
+ arAdapters. assumingMemoryBound ( to: IP_ADAPTER_ADDRESSES . self) ,
111
+ & ulSize)
112
+ guard ulResult == ERROR_SUCCESS else { return }
105
113
106
- ulResult = GetAdaptersAddresses ( ULONG ( AF_UNSPEC) , 0 , nil , arAdapterInfo, & ulSize)
114
+ var pAdapter : UnsafeMutablePointer < IP_ADAPTER_ADDRESSES > ? =
115
+ arAdapters. assumingMemoryBound ( to: IP_ADAPTER_ADDRESSES . self)
116
+ while pAdapter != nil {
117
+ // print("Adapter: \(String(cString: pAdapter!.pointee.AdapterName))")
107
118
108
- var buffer : [ WCHAR ] = Array < WCHAR > ( repeating: 0 , count: Int ( NI_MAXHOST) )
119
+ var arAddresses : UnsafeMutablePointer < IP_ADAPTER_UNICAST_ADDRESS > =
120
+ pAdapter!. pointee. FirstUnicastAddress
109
121
110
- var arCurrentAdapterInfo : UnsafeMutablePointer < IP_ADAPTER_ADDRESSES > ? =
111
- arAdapterInfo
112
- while arCurrentAdapterInfo != nil {
113
- var arAddress : UnsafeMutablePointer < IP_ADAPTER_UNICAST_ADDRESS > ? =
114
- arCurrentAdapterInfo!. pointee. FirstUnicastAddress
115
- while arAddress != nil {
116
- let arCurrentAddress : IP_ADAPTER_UNICAST_ADDRESS = arAddress!. pointee
117
- switch arCurrentAddress. Address. lpSockaddr. pointee. sa_family {
122
+ var pAddress : UnsafeMutablePointer < IP_ADAPTER_UNICAST_ADDRESS > ? =
123
+ arAddresses
124
+ while pAddress != nil {
125
+ switch pAddress!. pointee. Address. lpSockaddr. pointee. sa_family {
118
126
case ADDRESS_FAMILY ( AF_INET) , ADDRESS_FAMILY ( AF_INET6) :
119
- if GetNameInfoW ( arCurrentAddress. Address. lpSockaddr,
120
- arCurrentAddress. Address. iSockaddrLength,
121
- & buffer, DWORD ( NI_MAXHOST) ,
122
- nil , 0 , NI_NUMERICHOST) == 0 {
123
- _addresses. append ( String ( decodingCString: & buffer,
127
+ if GetNameInfoW ( pAddress!. pointee. Address. lpSockaddr,
128
+ pAddress!. pointee. Address. iSockaddrLength,
129
+ & szAddress, DWORD ( szAddress. capacity) , nil , 0 ,
130
+ NI_NUMERICHOST) == 0 {
131
+ // print("\tIP Address: \(String(decodingCString: &szAddress, as: UTF16.self))")
132
+ _addresses. append ( String ( decodingCString: & szAddress,
124
133
as: UTF16 . self) )
125
134
}
126
135
default : break
127
136
}
128
- arAddress = arCurrentAddress . Next
137
+ pAddress = pAddress! . pointee . Next
129
138
}
130
- arCurrentAdapterInfo = arCurrentAdapterInfo!. pointee. Next
139
+
140
+ pAdapter = pAdapter!. pointee. Next
131
141
}
132
142
_resolved = true
133
143
#else
0 commit comments