【发布时间】:2011-03-01 21:38:35
【问题描述】:
我将 libcurl 用于 RESTful 库。我在使用 PUT 消息时遇到了两个问题,我只是想通过 put 发送一个小内容,例如“hello”。
当我按照 curl.haxx.se 上的手册操作并返回 0 表示我已完成内容时,我的 PUT 块的 READFUNCTION 会持续很长时间(分钟)。 (在 os X 上)当我返回大于 0 的东西时,它的成功速度要快得多(
当我在我的 linux 机器 (ubuntu 10.4) 上运行它时,如果我更改行为以返回写入的大小,则此阻塞事件似乎永远不会返回方式更多的数据,它失败,来自服务器的“太多数据”消息。我的 readfunction 如下,任何帮助将不胜感激。 我正在使用 libcurl 7.20.1
typedef struct{
void *data;
int body_size;
int bytes_remaining;
int bytes_written;
} postdata;
size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream) {
if(stream) {
postdata *ud = (postdata*)stream;
if(ud->bytes_remaining) {
if(ud->body_size > size*nmemb) {
memcpy(ptr, ud->data+ud->bytes_written, size*nmemb);
ud->bytes_written+=size+nmemb;
ud->bytes_remaining = ud->body_size-size*nmemb;
return size*nmemb;
} else {
memcpy(ptr, ud->data+ud->bytes_written, ud->bytes_remaining);
ud->bytes_remaining=0;
return 0;
}
}
【问题讨论】: