NSMutableURLRequest timeout interval not taken into consideration for POST requests
According to a post on the Apple developer forum, the minimum timeout interval for POST is 240 seconds. Any timeout interval shorter than that is ignored.
If you require a shorter timeout interval, use an async request along with a timer and call cancel on the NSURLConnection as needed.
link to thread: here
iOS 6 has fixed this issue.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20];[request setHTTPMethod:method];[request setHTTPBody:requestBody];NSLog(@"%f", [request timeoutInterval]); //20.0 in iOS 6//240.0 in iOS 4.3, 5.0, 5.1
Fixed with Clay Chambers's suggestion: with a custom timerAdded a timer in a subclass of NSURLConnection
if (needsSeparateTimeout){ SEL sel = @selector(customCancel); NSMethodSignature* sig = [self methodSignatureForSelector:sel]; NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:sig]; [invocation setTarget:self]; [invocation setSelector:sel]; NSTimer *timer = [NSTimer timerWithTimeInterval:WS_REQUEST_TIMEOUT_INTERVAL invocation:invocation repeats:NO]; [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];}
In the custom cancel method the connection is cancelled
[super cancel];