首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFHostStartInfoResolution总是失败的

CFHostStartInfoResolution总是失败的
EN

Stack Overflow用户
提问于 2013-10-16 15:19:43
回答 1查看 897关注 0票数 1

我找到了从IP地址获取主机名的这段代码。问题是它总是在模拟器和我的3GS上失败。

请参见下面的代码,错误在以下代码中注释:

代码语言:javascript
复制
+ (NSArray *)hostnamesForAddress:(NSString *)address {
    // Get the host reference for the given address.
    CFStreamError streamError;
    struct addrinfo      hints;
    struct addrinfo      *result = NULL;
    memset(&hints, 0, sizeof(hints));
    hints.ai_flags    = AI_NUMERICHOST;
    hints.ai_family   = PF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = 0;
    int errorStatus = getaddrinfo([address cStringUsingEncoding:NSASCIIStringEncoding], NULL, &hints, &result);
    if (errorStatus != 0) return nil;
    CFDataRef addressRef = CFDataCreate(NULL, (UInt8 *)result->ai_addr, result->ai_addrlen);
    if (addressRef == nil) return nil;
    freeaddrinfo(result);
    CFHostRef hostRef = CFHostCreateWithAddress(kCFAllocatorDefault, addressRef);
    if (hostRef == nil) return nil;
    CFRelease(addressRef);
    BOOL isSuccess = CFHostStartInfoResolution(hostRef, kCFHostNames, &streamError);
    // always false
    if (!isSuccess){
        NSLog(@"error:%@",[self convertCFStreamErrorIntoNSError:streamError]);
        // error:Error Domain=kCFErrorDomainCFNetwork Code=2 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error 2.)" UserInfo=0x1cd29190 {kCFGetAddrInfoFailureKey=8}
        return nil;
    }

    // Get the hostnames for the host reference.
    CFArrayRef hostnamesRef = CFHostGetNames(hostRef, NULL);
    NSMutableArray *hostnames = [NSMutableArray array];
    for (int currentIndex = 0; currentIndex < [(__bridge NSArray *)hostnamesRef count]; currentIndex++) {
        [hostnames addObject:[(__bridge NSArray *)hostnamesRef objectAtIndex:currentIndex]];
    }

    return hostnames;
}

有人能告诉我怎么了吗?

EN

回答 1

Stack Overflow用户

发布于 2013-10-16 16:19:41

这听起来像是DNS查找失败。错误消息的关键部分是:

代码语言:javascript
复制
{kCFGetAddrInfoFailureKey=8}

来自CFNetwork误码参考 for kCFGetAddrInfoFailureKey

如果返回kCFHostErrorUnknown类型的错误,则此键返回getaddrinfo响应DNS查找返回的最后一个错误代码。要解释结果,请在/usr/include/netdb.h中查找错误代码。

来自/usr/include/netdb.h

代码语言:javascript
复制
#define EAI_NONAME  8  /* hostname nor servname provided, or not known */

尝试使用不同的DNS服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19407309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档