NSMutableURLRequest not obeying my timeoutInterval
Asked Answered
C

3

31

I'm POST'ing a small image, so i'd like the timeout interval to be short. If the image doesn't send in a few seconds, it's probably never going to send. For some unknown reason my NSURLConnection is never failing, no matter how short I set the timeoutInterval.

// Create the URL request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] 
                                 initWithURL:[NSURL URLWithString:@"http://www.tumblr.com/api/write"]
                                 cachePolicy:NSURLRequestUseProtocolCachePolicy
                                 timeoutInterval:0.00000001];

/* Populate the request, this part works fine */

[NSURLConnection connectionWithRequest:request delegate:self];

I have a breakpoint set on - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error but it's never being triggered. My images continue to be posted just fine, they're showing up on Tumblr despite the tiny timeoutInterval.

Confident answered 29/4, 2010 at 11:46 Comment(0)
V
49

There's a thread on Apple dev forums discussing this issue. Apparently on iPhone OS, the setter mandates timeoutInterval a minimum of 240 seconds (4 minutes). This only occurs when the postBody is not empty (typically when using a POST request). This seems crazy, but apparently it's there to make sure requests leave the system even though it might take many seconds for the WWAN (3G) interface to wake up. 240 seconds seems rather steep, so they suggest to set a timer and cancel the asynchronous connection when your timer fires. I know this seems stupid, but that's the only I managed to get timeout for POST requests... :-(

Victorvictoria answered 5/5, 2010 at 20:59 Comment(1)
That's obnoxious. Do you happen to have a link to the discussion? None of my searches turned up anything.Confident
H
5

As François mentioned above, the 240 seconds seemed to be working as he described up until iOS 6 (including on 5.1). Now, this timeout appears to take on the default value of 60 seconds as expected (if you didn't explicitly set it yourself), so if you have a POST request that might have relied on the longer time inadvertently, you might need to change the timeoutInterval manually to use a higher value. I've been able to set the timeout both below and above 60 seconds for a POST so it doesn't appear that the 60 second mark represents a minimum restriction to the timeout for this type of request either.

Heavensent answered 21/9, 2012 at 17:13 Comment(0)
D
-2

This issue is fixed in iOS5, So you won't be facing this problem now. And your code will work perfectly

Disgusting answered 15/5, 2012 at 2:31 Comment(3)
I don't know where you get this information from, but in practise, I am running on 5.1.1 and it's not listening to my smaller timeoutIntervalOsithe
it is fixed in iOS 6 instead.Reimburse
it is still not fixed in ios 7.1 or it reappearedBadman

© 2022 - 2024 — McMap. All rights reserved.