CFHostStartInfoResolution总是失败ubunteros

我已经find了这个很好的代码从IP地址获得主机名。 问题是它总是在模拟器和我的3GS上都失败。

看下面的代码,错误是在内部评论的:

+ (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; } 

有人能说我什么是错的吗?

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

 {kCFGetAddrInfoFailureKey=8} 

kCFGetAddrInfoFailureKey的CFNetwork错误代码参考 :

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

/usr/include/netdb.h

 #define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 

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

Interesting Posts