X-Git-Url: http://git.sven.stormbind.net/?a=blobdiff_plain;f=doc%2Ftclcurl_multi.html;fp=doc%2Ftclcurl_multi.html;h=09c82f6334d35123b14ab24bbf5f10b8b32e9b2b;hb=b0e6fb6e4379fb87fa2854b84a56c5ad49c644da;hp=0000000000000000000000000000000000000000;hpb=c9a5bcd9d76f699909b24e71a2a216d36062ab0b;p=sven%2Ftclcurl.git diff --git a/doc/tclcurl_multi.html b/doc/tclcurl_multi.html new file mode 100755 index 0000000..09c82f6 --- /dev/null +++ b/doc/tclcurl_multi.html @@ -0,0 +1,319 @@ +Manpage of TclCurl + +

TclCurl

+Section: TclCurl Multi Interface (n)
Updated: 8 September 2008

+ +  +

NAME

+ +TclCurl: - get a URL with FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE or LDAP syntax. +  +

SYNOPSIS

+ +curl::multiinit + +

+multiHandle addhandle + +

+multiHandle removehandle + +

+multiHandle configure + +

+multiHandle perform + +

+multiHandle active + +

+multiHandle getinfo + +

+multihandle cleanup + +

+multihandle auto + +

+curl::multistrerror errorCode + +

+  +

DESCRIPTION

+ +TclCurl's multi interface introduces several new abilities that the easy +interface refuses to offer. They are mainly: + +

+ +  +

Blocking

+ +A few areas in the code are still using blocking code, even when used from the +multi interface. While we certainly want and intend for these to get fixed in +the future, you should be aware of the following current restrictions: + + +

+  +

curl::multiinit

+ +This procedure must be the first one to call, it returns a multiHandle +that you need to use to invoke TclCurl procedures. The init MUST have a +corresponding call to cleanup when the operation is completed. +

+RETURN VALUE + +

+multiHandle + +to use. +

+  +

multiHandle addhandle ?easyHandle?

+ +

+Each single transfer is built up with an 'easy' handle, the kind we have been +using so far with TclCurl, you must create them and setup the appropriate +options for each of them. Then we add them to the 'multi stack' using the +addhandle command. +

+If the easy handle is not set to use a shared or global DNS cache, it will be made +to use the DNS cache that is shared between all easy handles within the multi handle. +

+When an easy handle has been added to a multi stack, you can not and you must not use +perform on that handle! +

+

+multiHandle + +is the return code from the curl::multiinit call. +

+RETURN VALUE + +The possible return values are: +

+
-1
+Handle added to the multi stack, please call +perform + +soon +
0
+Handle added ok. +
1
+Invalid multi handle. +
2
+Invalid 'easy' handle. It could mean that it isn't an easy handle at all, or possibly that +the handle already is in used by this or another multi handle. +
3
+Out of memory, you should never get this. +
4
+You found a bug in TclCurl. +

+

+  +

multiHandle removehandle ?easyHandle?

+ +

+When a transfer is done or if we want to stop a transfer before it is completed, +we can use the removehandle command. Once removed from the multi handle, +we can again use other easy interface functions on it. +

+Please note that when a single transfer is completed, the easy handle is still +left added to the multi stack. You need to remove it and then close or, possibly, +set new options to it and add it again to the multi handle to start another transfer. +

+

+RETURN VALUE + +The possible return values are: +

+
0
+Handle removed ok. +
1
+Invalid multi handle. +
2
+Invalid 'easy' handle. +
3
+Out of memory, you should never get this. +
4
+You found a bug in TclCurl. +

+

+  +

multiHandle configure

+ +So far the only option is: +
+
-pipelining + +
+Pass a 1 to enable or 0 to disable. Enabling pipelining on a multi handle will +make it attempt to perform HTTP Pipelining as far as possible for transfers using +this handle. This means that if you add a second request that can use an already +existing connection, the second request will be "piped" on the same connection +rather than being executed in parallel. +
-maxconnects + +
+Pass a number which will be used as the maximum amount of simultaneously open +connections that TclCurl may cache. Default is 10, and TclCurl will enlarge +the size for each added easy handle to make it fit 4 times the number of added +easy handles. +

+By setting this option, you can prevent the cache size to grow beyond the limit +set by you. When the cache is full, curl closes the oldest one in the cache to +prevent the number of open connections to increase. +

+This option is for the multi handle's use only, when using the easy interface you should instead use it's own maxconnects option. +

+

+  +

multiHandle perform

+ +Adding the easy handles to the multi stack does not start any transfer. +Remember that one of the main ideas with this interface is to let your +application drive. You drive the transfers by invoking +perform. + +TclCurl will then transfer data if there is anything available to transfer. +It'll use the callbacks and everything else we have setup in the individual +easy handles. It'll transfer data on all current transfers in the multi stack +that are ready to transfer anything. It may be all, it may be none. +

+When you call perform and the amount of Irunning handles is +changed from the previous call (or is less than the amount of easy handles +you added to the multi handle), you know that there is one or more +transfers less "running". You can then call getinfo to +get information about each individual completed transfer. +

+RETURN VALUE + +If everything goes well, it returns the number of running handles, '0' if all +are done. In case of error, it will return the error code. +

+  +

multiHandle active

+ +In order to know if any of the easy handles are ready to transfer data before +invoking +perform + +you can use the +active + +command, it will return the number of transfers currently active. +

+RETURN VALUE + +The number of active transfers or '-1' in case of error. +

+  +

multiHandle getinfo

+ +This procedure returns very simple information about the transfers, you +can get more detail information using the getinfo +command on each of the easy handles. +

+

+RETURN VALUE + +A list with the following elements: +

+
easyHandle about which the info is about.
+
state of the transfer, '1' if it is done.
+
exit code of the transfer, '0' if there was no error,...
+
Number of messages still in the info queue.
+
In case there are no messages in the queue it will return {"" 0 0 0}.
+

+

+  +

multiHandle cleanup

+ +This procedure must be the last one to call for a multi stack, it is the opposite of the +curl::multiinit + +procedure and must be called with the same +multiHandle + +as input as the +curl::multiinit + +call returned. +

+  +

multiHandle auto ?-command command?

+ +Using this command Tcl's event loop will take care of periodically invoking perform +for you, before using it, you must have already added at least one easy handle to +the multi handle. +

+The command option allows you to specify a command to invoke after all the easy +handles have finished their transfers, even though I say it is an option, the truth is +you must use this command to cleanup all the handles, otherwise the transfered files +may not be complete. +

+This support is still in a very experimental state, it may still change without warning. +Any and all comments are welcome. +

+You can find a couple of examples at tests/multi. +

+  +

curl::multistrerror errorCode

+ +This procedure returns a string describing the error code passed in the argument. +

+  +

SEE ALSO

+ +tclcurl, curl. + +

+ +


+ 

Index

+
+
NAME
+
SYNOPSIS
+
DESCRIPTION
+
Blocking
+
curl::multiinit
+
multiHandle addhandle ?easyHandle?
+
multiHandle removehandle ?easyHandle?
+
multiHandle configure
+
multiHandle perform
+
multiHandle active
+
multiHandle getinfo
+
multiHandle cleanup
+
multiHandle auto ?-command command?
+
curl::multistrerror errorCode
+
SEE ALSO
+
+
+This document was created by man2html, using the manual pages.
+ +