DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

CURLOPT_SEEKFUNCTION(3)





CURLOPT_SEEKFUNCTION(3curl_easy_setopt optionCURLOPT_SEEKFUNCTION(3)



NAME

     CURLOPT_SEEKFUNCTION - user callback for  seeking  in  input
     stream


SYNOPSIS

     #include <curl/curl.h>

     /* These are the return codes for the seek callbacks */
     #define CURL_SEEKFUNC_OK       0
     #define CURL_SEEKFUNC_FAIL     1 /* fail the entire transfer */
     #define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so
                                         libcurl might try other means instead */

     int seek_callback(void *userp, curl_off_t offset, int origin);

     CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKFUNCTION, seek_callback);


DESCRIPTION

     Pass a pointer to your callback function, which should match
     the prototype shown above.

     This function gets called by libcurl to seek  to  a  certain
     position in the input stream and can be used to fast forward
     a file in a resumed upload (instead of reading all  uploaded
     bytes  with  the  normal read function/callback). It is also
     called to rewind a stream when data has already been sent to
     the  server and needs to be sent again. This may happen when
     doing a HTTP PUT or POST with  a  multi-pass  authentication
     method,  or  when  an existing HTTP connection is reused too
     late and the server  closes  the  connection.  The  function
     shall  work  like fseek(3) or lseek(3) and it gets SEEK_SET,
     SEEK_CUR or SEEK_END as argument for origin,  although  lib-
     curl currently only passes SEEK_SET.

     userp is the pointer you set with CURLOPT_SEEKDATA(3).

     The callback function must return CURL_SEEKFUNC_OK  on  suc-
     cess,  CURL_SEEKFUNC_FAIL  to  cause the upload operation to
     fail or CURL_SEEKFUNC_CANTSEEK to indicate  that  while  the
     seek  failed,  libcurl is free to work around the problem if
     possible. The latter can sometimes be done by instead  read-
     ing from the input or similar.

     If you forward the input arguments directly to  fseek(3)  or
     lseek(3), note that the data type for offset is not the same
     as defined for curl_off_t on many systems!


DEFAULT

     By default, this is NULL and unused.


PROTOCOLS

     HTTP, FTP, SFTP

libcurl 7.58.0    Last change: August 12, 2017                  1


CURLOPT_SEEKFUNCTION(3curl_easy_setopt optionCURLOPT_SEEKFUNCTION(3)



EXAMPLE

     static int seek_cb(void *userp, curl_off_t offset, int origin)
     {
       struct data *d = (struct data *)userp;
       lseek(our_fd, offset, origin);
       return CURL_SEEKFUNC_OK;
     }

     {
       struct data seek_data;
       curl_easy_setopt(CURL *handle, CURLOPT_SEEKFUNCTION, seek_cb);
       curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, &seek_data);
     }


AVAILABILITY

     Added in 7.18.0


RETURN VALUE

     Returns  CURLE_OK  if   the   option   is   supported,   and
     CURLE_UNKNOWN_OPTION if not.


SEE ALSO

     CURLOPT_SEEKDATA(3), CURLOPT_IOCTLFUNCTION(3),

libcurl 7.58.0    Last change: August 12, 2017                  2


Man(1) output converted with man2html