Hızlı bir DNS araması yapmayı çabucak yapmaya çalışıyorum. Şimdiye kadar, burada ben kod şudur: "adresleri" Bu noktadaConvert NSData sockaddr yapısına hızlıca geçin
let hostRef = CFHostCreateWithName(kCFAllocatorDefault, "google.com").takeRetainedValue()
var resolved = CFHostStartInfoResolution(hostRef, CFHostInfoType.Addresses, nil)
let addresses = CFHostGetAddressing(hostRef, &resolved).takeRetainedValue() as NSArray
, her öğe NSArray bir sockaddr yapı sarma bir CFDataRef nesnesidir.
CFDataRef ücretsiz NSData için köprülü olabilir beri
, ben şöyle içlerinden döngü edebilirsiniz:for address: AnyObject in addresses {
println(address) // address is of type NSData.
}
Şimdiye kadar iyi (Sanırım). Bu, bir birim testinde çalıştırdığımda geçerli görünen verileri yazdırır. Burada sıkışıp kaldım. Benim yaşamım için, NSData nesnesindeki baytların bir sockaddr yapısına nasıl dönüştürüleceğini anlayamıyorum.
Tip COpaquePointer? Adresindeki address.bytes öğesini c yapısına nasıl dönüştürebilirim? Herhangi bir yardım takdir edildi. Bunu anlamaya çalışırken kafamı duvara çarpıyorum.
Bu bile basitleştirilmiş olabilir için sadece görmek:
Ya da bu: Bunu önlemek için böyle bir şey yapabileceğini data.getBytes (& addr, uzunluk: sizeof (sockaddr)) – kgreenek
İyi nokta. Cevabımı güncelledim ve ayrıca ilk önce yapıyı başlatmadan aynı şeyi yapmakla ilgili bilgiler ekledim. – jtbandes
Değeri için, muhtemelen sockaddr kullanmak istemezsiniz - ama gerçek sockaddr yapısına sahip olursunuz. Sockaddr_in veya sockaddr_un gibi. Aksi takdirde büyük olasılıkla bir arabellek taşması olur. Belki de bu eklentiyi faydalı buluyorsunuz: https://github.com/AlwaysRightInstitute/SwiftSockets/blob/master/ARISockets/SocketAddress.swift – hnh