声明

  1. /* These are the return codes for the seek callbacks */
  2. #define CURL_SEEKFUNC_OK 0
  3. #define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */
  4. #define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so
  5. libcurl might try other means instead */
  6. int seek_callback(void *userp, curl_off_t offset, int origin);
  7. CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKFUNCTION, seek_callback);

概要

在输入流中重定位的用户回调。

详情

传入一个指向你的回调函数的指针,该函数应该匹配上面显示的原型。

libcurl需要定位到输入流的一个确切位置时会调用这个函数,以及在恢复上传的时候用这个函数来快速前进(而不是通过普通的读取函数/回调来读取所有已经上传过的字节)。当数据已经发送到服务器上并且需要再次发送时,它也会被调用来回溯一个流。这可能会发生在以下情况下:当以多通道的身份验证方式执行一个HTTP PUT或者POST时;或者当一个已存在的HTTP连接重用得太晚而服务器已经关闭了这个连接时。该函数的作用应该类似fseek或者lseek,它的origin参数会被设置成SEEK_SETSEEK_CUR或者SEEK_END,虽然libcurl目前只传入SEEK_SET

userp是你通过CURLOPT_SEEKDATA设置的指针。

回调函数必须返回CURL_SEEKFUNC_OK以示成功。返回CURL_SEEKFUNC_FAIL则会导致上传操作失败。或者返回CURL_SEEKFUNC_CANTSEEK指示libcurl虽然重定位失败,但是它可以在可能的情况下自行处理这个问题。后者有时可以通过读取输入或者其它类似的方法来解决。

如果你把输入参数直接转发给fseek或者lseek,要注意offset的数据类型在很多系统上与curl_off_t的定义不一样!

默认值

默认情况下,这个值是NULL,没有使用。

适用协议

HTTP,FTP,SFTP

可用性

在7.18.0加入。

返回值

如果支持该选项,返回CURLE_OK,否则返回CURLE_UNKNOWN_OPTION