My project is using AFNetworking.
https://github.com/AFNetworking/AFNetworking
How do I dial down the timeout? Atm with no internet connection the fail block isn't triggered for what feels like about 2 mins. Waay to long....
My project is using AFNetworking.
https://github.com/AFNetworking/AFNetworking
How do I dial down the timeout? Atm with no internet connection the fail block isn't triggered for what feels like about 2 mins. Waay to long....
Can't we do this with a timer like this:
In .h file
In .m file
Agree with Matt, you shouldn't try change the timeoutInterval. But you also should not rely on reachability check to decide weather you are gonna make the connection, you don't know until you try.
As stated by Apple document:
Finally found out how to do it with an asynchronous POST request:
I tested this code by letting my server
sleep(aFewSeconds)
.If you need to do a synchronous POST request, do NOT use
[queue waitUntilAllOperationsAreFinished];
. Instead use the same approach as for the asynchronous request and wait for the function to be triggered which you pass on in the selector argument.I strongly recommend looking at mattt's answer above - although this answer doesn't fall foul of the problems he mentions in general, for the original posters question, checking reachability is a much better fit.
However, if you do still want to set a timeout (without all the problems inherent in
performSelector:afterDelay:
etc, then the pull request Lego mentions describes a way to do this as one of the comments, you just do:but see the caveat @KCHarwood mentions that it appears Apple don't allow this to be changed for POST requests (which is fixed in iOS 6 and upwards).
As @ChrisopherPickslay points out, this isn't an overall timeout, it's a timeout between receiving (or sending data). I'm not aware of any way to sensibly do an overall timeout. The Apple documentation for setTimeoutInterval says:
You can set the timeout interval through requestSerializer setTimeoutInterval method.You can get the requestSerializer from an AFHTTPRequestOperationManager instance.
For example to do a post request with a timeout of 25 second :
There are two different meanings on the "timeout" definition here.
Timeout as in
timeoutInterval
You want to drop a request when it becomes idle (no more transfer) for longer than an arbitrary interval of time. Example: you set
timeoutInterval
to 10 seconds, you start your request at 12:00:00, it may transfer some data until 12:00:23, then connection will timeout at 12:00:33. This case is covered by almost all answers here (including JosephH, Mostafa Abdellateef, Cornelius and Gurpartap Singh).Timeout as in
timeoutDeadline
You want to drop a request when it reaches a deadline happening arbitrary later. Example: you set
deadline
to 10 seconds in the future, you start your request at 12:00:00, it may attempt to transfer some data until 12:00:23, but connection will timeout earlier at 12:00:10. This case is covered by borisdiakur.I'd like to show how to implement this deadline in Swift (3 and 4) for AFNetworking 3.1.
And to give a testable example, this code should print "failure" instead of "success" because of the immediate timeout at 0.0 seconds in the future: