On Thu, 17 Feb 2011, comain chen wrote:
1. When using persistent connections, is there a reliable way to detect
whether the reused connection is still alive?
Yes, and libcurl does it in two ways: first it checks if the socket has turned
writable which would mean that it died. Then, it takes a special precaution in
case the first operation on the re-used socket fails and re-creates the
connection if it does.
I think there is no way to do so.
Why not?
Therefore, the transfer over a reused connection can fail at all possible
stages (i.e. the reused connection is suddenly dad)
No. A persistent connection can only validly get disconnected between two
usages. It cannot disconnect during a request without that being an actual
error.
2. If the above is true, all states in curl_multi_runsingle should
check for this case and make sure to retry a new fresh connection to
recover.
But it isn't true so we don't.
This caused my problem, I am using mutli to connect to several http servers
which does not favor persistent connection and closed the connection
immediately after response.
Then it also signals that in the response, and even if doesn't signal it but
simply closes it anyway, closing the connection after a full response
shouldn't cause a problem.
When a later request comes, it is possible that an old dead connection is
reused and caused failure in various stages.
No. When a request is started it is in the start stage(s), not "in various
stages", so it can only legitimately fail there and not later on during the
request's life time.
--
/ daniel.haxx.se
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html