Разрешение DNS на iPhone, возвращены не все записи A - PullRequest
1 голос
/ 22 февраля 2011

У меня есть следующий код, который должен получить все записи DNS A для URL. Когда я вызываю этот код из пользовательского интерфейса, он работает нормально и возвращает все записи A, но, когда этот код вызывается из какого-то другого асинхронного потока, он всегда возвращает только один IP (одну запись A). Есть идеи, почему?

это код:

Boolean result;
CFHostRef hostRef = NULL;
CFArrayRef addresses = NULL;
NSString *hostname = [NSString stringWithCString:server];
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname);
if (hostRef) {  
result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed
        if (result == TRUE) {
            addresses = CFHostGetAddressing(hostRef, &result);
        }

    }
    if (result == TRUE) 
    {
        NSLog(@"ResolveDNS - Resolved");


        for (CFIndex count = 0; count < CFArrayGetCount(addresses); count++)
        {
            char addr[256];
            struct sockaddr_in *sa = (struct sockaddr_in *)
            CFDataGetBytePtr((CFDataRef)CFArrayGetValueAtIndex(addresses, count));
            // inet_ntop will correctly display both IPv4 and IPv6 addresses
            if (inet_ntop(sa->sin_family, &sa->sin_addr, addr, sizeof(addr)))
                printf("%s:%d \n", addr, ntohs(sa->sin_port));

            [ipTmpArray addObject:[NSString stringWithCString:addr]];
        }

1 Ответ

0 голосов
/ 20 мая 2011

то же самое происходит на всех моих устройствах iOS (все на 4.2 или 4.3), но не на моем симуляторе. И если я снова запускаю тот же метод, я иногда получаю больше IP, иногда даже все.

Я подозреваю, что это связано с iOS, какой-то оптимизацией памяти при записи предыдущих разрешений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...