| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- .\" generated by cd2nroff 0.1 from CURLOPT_XFERINFOFUNCTION.md
- .TH CURLOPT_XFERINFOFUNCTION 3 "2025-01-17" libcurl
- .SH NAME
- CURLOPT_XFERINFOFUNCTION \- progress meter callback
- .SH SYNOPSIS
- .nf
- #include <curl/curl.h>
- int progress_callback(void *clientp,
- curl_off_t dltotal,
- curl_off_t dlnow,
- curl_off_t ultotal,
- curl_off_t ulnow);
- CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFOFUNCTION,
- progress_callback);
- .fi
- .SH DESCRIPTION
- Pass a pointer to your callback function, which should match the prototype
- shown above.
- This function gets called by libcurl instead of its internal equivalent with a
- frequent interval. While data is being transferred it gets called frequently,
- and during slow periods like when nothing is being transferred it can slow
- down to about one call per second.
- \fIclientp\fP is the pointer set with \fICURLOPT_XFERINFODATA(3)\fP, it is not
- used by libcurl but is only passed along from the application to the callback.
- The callback gets told how much data libcurl is about to transfer and has
- already transferred, in number of bytes. \fIdltotal\fP is the total number of
- bytes libcurl expects to download in this transfer. \fIdlnow\fP is the number
- of bytes downloaded so far. \fIultotal\fP is the total number of bytes libcurl
- expects to upload in this transfer. \fIulnow\fP is the number of bytes
- uploaded so far.
- Unknown/unused argument values passed to the callback are set to zero (like if
- you only download data, the upload size remains 0). Many times the callback is
- called one or more times first, before it knows the data sizes so a program
- must be made to handle that.
- If your callback function returns CURL_PROGRESSFUNC_CONTINUE it makes libcurl
- to continue executing the default progress function.
- Returning any other non\-zero value from this callback makes libcurl abort the
- transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP.
- If you transfer data with the multi interface, this function is not called
- during periods of idleness unless you call the appropriate libcurl function
- that performs transfers.
- \fICURLOPT_NOPROGRESS(3)\fP must be set to 0 to make this function actually
- get called.
- .SH DEFAULT
- NULL \- use the internal progress meter. That is rarely wanted by users.
- .SH PROTOCOLS
- This functionality affects all supported protocols
- .SH EXAMPLE
- .nf
- struct progress {
- char *private;
- size_t size;
- };
- static size_t progress_callback(void *clientp,
- curl_off_t dltotal,
- curl_off_t dlnow,
- curl_off_t ultotal,
- curl_off_t ulnow)
- {
- struct progress *memory = clientp;
- printf("my ptr: %p\\n", memory->private);
- /* use the values */
- return 0; /* all is good */
- }
- int main(void)
- {
- CURL *curl = curl_easy_init();
- if(curl) {
- struct progress data;
- /* pass struct to callback */
- curl_easy_setopt(curl, CURLOPT_XFERINFODATA, &data);
- /* enable progress callback getting called */
- curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
- curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, progress_callback);
- }
- }
- .fi
- .SH AVAILABILITY
- Added in curl 7.32.0
- .SH RETURN VALUE
- Returns CURLE_OK.
- .SH SEE ALSO
- .BR CURLOPT_NOPROGRESS (3),
- .BR CURLOPT_XFERINFODATA (3)
|