Я использую NSURLSession
на моем приложении, так как iOS 7 впервые вышел. В последнее время некоторые пользователи стали жаловаться, что некоторые функции не работают, после того, как глубокий взгляд на их журналы, я заметил, что несколько сетевых запросов не удалось с ошибкой:Недопустимые ошибки сервера с NSURLSession
{NSLocalizedDescription=Server is unreachable. Check your network connection and try again., NSUnderlyingError=0x174c4c300 "The operation couldnât be completed. (NSURLErrorDomain error -1001.)"}
Как я понятия не имею, что проблема может быть, я добавил код для разрешения имени хоста при запросе не удалось:
NSString *urlString = [url host];
const char *hostUrl = [urlString UTF8String];
struct hostent *remote_entity = gethostbyname(host);
if (!remote_entity) {
DDLogWarn(@"DNS Lookup failed! Cant resolve Hostname: %@ for request: %@", [url host], [url description]);
return nil;
}
else {
// Get address info from host entry
struct in_addr *remote_in_addr = (struct in_addr *) remote_entity->h_addr_list[0];
char *sremote_in_addr = inet_ntoa(*remote_in_addr);
NSString* hostIP = [NSString stringWithUTF8String:sremote_in_addr];
DDLogWarn(@"Hostname: %@ IP: %@ (original request: %@)", [url host], hostIP, [url description]);
return hostIP;
}
После развертывания этого изменения, я могу видеть в моих журналах, что даже если запрос не удается (с NSURLErrorDomain ошибки -1001) Я все еще могу разрешить имя хоста.
Я не понимаю, как это может произойти, я всегда могу разрешить имя хоста, но запросы все равно терпят неудачу. Обратите внимание, что я не могу воспроизвести это, и эта ошибка проявляется время от времени без предсказуемого шаблона.
Любые идеи о том, как исправить это навсегда? Должен ли я реализовать механизм отслеживания пакетов в моих приложениях (аналогично traceroute в unix)? Может ли это быть неправильной конфигурацией на моих серверах, поскольку запросы на другие хосты (например, Amazon S3) никогда не прерываются? Кстати, я использую Heroku.
Спасибо заранее, Ze