@@ -2071,45 +2071,47 @@ OFDNSResolver_AsyncResolveSocketAddressesContext *context; @try { of_socket_address_t address = of_socket_address_parse_ip(host, 0); - OFData *addresses; - - if (addressFamily != OF_SOCKET_ADDRESS_FAMILY_ANY && - address.family != addressFamily) { - if ([delegate respondsToSelector: @selector(resolver: - didResolveDomainName:socketAddresses:exception:)]) { - OFInvalidArgumentException *exception = - [OFInvalidArgumentException exception]; - - [delegate resolver: self - didResolveDomainName: host - socketAddresses: nil - exception: exception]; - } - return; - } - - addresses = [OFData dataWithItems: &address - itemSize: sizeof(address) - count: 1]; - - if ([delegate respondsToSelector: @selector(resolver: - didResolveDomainName:socketAddresses:exception:)]) - [delegate resolver: self - didResolveDomainName: host - socketAddresses: addresses - exception: nil]; + OFData *addresses = nil; + id exception = nil; + + if (addressFamily == OF_SOCKET_ADDRESS_FAMILY_ANY || + addressFamily == address.family) + addresses = [OFData dataWithItems: &address + itemSize: sizeof(address) + count: 1]; + else + exception = [OFInvalidArgumentException exception]; + + if ([delegate respondsToSelector: @selector(resolver: + didResolveDomainName:socketAddresses:exception:)]) { + OFTimer *timer = [OFTimer + timerWithTimeInterval: 0 + target: delegate + selector: @selector(resolver: + didResolveDomainName: + socketAddresses: + exception:) + object: self + object: host + object: addresses + object: exception + repeats: false]; + [[OFRunLoop currentRunLoop] addTimer: timer + forMode: runLoopMode]; + } return; } @catch (OFInvalidFormatException *e) { } if ((aliases = [_staticHosts objectForKey: host]) != nil) { OFMutableData *addresses = [OFMutableData dataWithItemSize: sizeof(of_socket_address_t)]; + id exception = nil; for (OFString *alias in aliases) { of_socket_address_t address; @try { @@ -2126,12 +2128,13 @@ } [addresses makeImmutable]; if ([addresses count] == 0) { - id exception = nil; of_dns_resource_record_type_t recordType = 0; + + addresses = nil; switch (addressFamily) { case OF_SOCKET_ADDRESS_FAMILY_ANY: recordType = OF_DNS_RESOURCE_RECORD_TYPE_ALL; break; @@ -2157,25 +2160,29 @@ exceptionWithHost: host recordClass: recordClass recordType: recordType error: error]; } - - if ([delegate respondsToSelector: @selector(resolver: - didResolveDomainName:socketAddresses:exception:)]) - [delegate resolver: self - didResolveDomainName: host - socketAddresses: nil - exception: exception]; } if ([delegate respondsToSelector: @selector(resolver: - didResolveDomainName:socketAddresses:exception:)]) - [delegate resolver: self - didResolveDomainName: host - socketAddresses: addresses - exception: nil]; + didResolveDomainName:socketAddresses:exception:)]) { + OFTimer *timer = [OFTimer + timerWithTimeInterval: 0 + target: delegate + selector: @selector(resolver: + didResolveDomainName: + socketAddresses: + exception:) + object: self + object: host + object: addresses + object: exception + repeats: false]; + [[OFRunLoop currentRunLoop] addTimer: timer + forMode: runLoopMode]; + } return; } pool = objc_autoreleasePoolPush();