more accurate

This commit is contained in:
Daniel Stenberg 2001-11-02 13:16:29 +00:00
parent dc82f9e6df
commit 2297a7a70c
1 changed files with 21 additions and 14 deletions

View File

@ -1,4 +1,4 @@
Updated for curl 7.8 on May 29, 2001 Updated for curl 7.9.1 on November 2, 2001
_ _ ____ _ _ _ ____ _
___| | | | _ \| | ___| | | | _ \| |
/ __| | | | |_) | | / __| | | | |_) | |
@ -78,15 +78,15 @@ Library
makes sure we stay absolutely platform independent. makes sure we stay absolutely platform independent.
curl_easy_init() allocates an internal struct and makes some initializations. curl_easy_init() allocates an internal struct and makes some initializations.
The returned handle does not reveal internals. This is the 'UrlData' struct The returned handle does not reveal internals. This is the 'SessionHandle'
which works as a global "anchor" struct. All connections performed will get struct which works as an "anchor" struct for all curl_easy functions. All
connect-specific data allocated that should be used for things related to connections performed will get connect-specific data allocated that should be
particular connections/requests. used for things related to particular connections/requests.
curl_easy_setopt() takes three arguments, where the option stuff must be curl_easy_setopt() takes three arguments, where the option stuff must be
passed in pairs: the parameter-ID and the parameter-value. The list of passed in pairs: the parameter-ID and the parameter-value. The list of
options is documented in the man page. This function mainly sets things in options is documented in the man page. This function mainly sets things in
the 'UrlData' struct. the 'SessionHandle' struct.
curl_easy_perform() does a whole lot of things: curl_easy_perform() does a whole lot of things:
@ -106,7 +106,7 @@ Library
This function makes sure there's an allocated and initiated 'connectdata' This function makes sure there's an allocated and initiated 'connectdata'
struct that is used for this particular connection only (although there may struct that is used for this particular connection only (although there may
be several requests performed on the same connect). A bunch of things are be several requests performed on the same connect). A bunch of things are
inited/inherited from the UrlData struct. inited/inherited from the SessionHandle struct.
o Curl_do() o Curl_do()
@ -123,6 +123,13 @@ Library
Curl_Transfer() function (in lib/transfer.c) to setup the transfer and Curl_Transfer() function (in lib/transfer.c) to setup the transfer and
returns. returns.
Starting in 7.9.1, if this DO function fails and the connection is being
re-used, libcurl will then close this connection, setup a new connection
and re-issue the DO request on that. This is because there is no way to be
perfectly sure that we have discovered a dead connection before the DO
function and thus we might wrongly be re-using a connection that was closed
by the remote peer.
o Transfer() o Transfer()
Curl_perform() then calls Transfer() in lib/transfer.c that performs Curl_perform() then calls Transfer() in lib/transfer.c that performs
@ -144,7 +151,7 @@ Library
o Curl_disconnect() o Curl_disconnect()
When doing normal connections and transfers, no one ever tries to close any When doing normal connections and transfers, no one ever tries to close any
connection so this is not normally called when curl_easy_perform() is connections so this is not normally called when curl_easy_perform() is
used. This function is only used when we are certain that no more transfers used. This function is only used when we are certain that no more transfers
is going to be made on the connection. It can be also closed by force, or is going to be made on the connection. It can be also closed by force, or
it can be called to make sure that libcurl doesn't keep too many it can be called to make sure that libcurl doesn't keep too many
@ -258,12 +265,12 @@ Persistent Connections
The persistent connection support in libcurl requires some considerations on The persistent connection support in libcurl requires some considerations on
how to do things inside of the library. how to do things inside of the library.
o The 'UrlData' struct returned in the curl_easy_init() call must never o The 'SessionHandle' struct returned in the curl_easy_init() call must never
hold connection-oriented data. It is meant to hold the root data as well hold connection-oriented data. It is meant to hold the root data as well as
as all the options etc that the library-user may choose. all the options etc that the library-user may choose.
o The 'UrlData' struct holds the "connection cache" (an array of pointers to o The 'SessionHandle' struct holds the "connection cache" (an array of
'connectdata' structs). There's one connectdata struct allocated for each pointers to 'connectdata' structs). There's one connectdata struct
connection that libcurl knows about. allocated for each connection that libcurl knows about.
o This also enables the 'curl handle' to be reused on subsequent transfers, o This also enables the 'curl handle' to be reused on subsequent transfers,
something that was illegal before libcurl 7.7. something that was illegal before libcurl 7.7.
o When we are about to perform a transfer with curl_easy_perform(), we first o When we are about to perform a transfer with curl_easy_perform(), we first