J'utilise libcurl pour une bibliothèque RESTful. J'ai deux problèmes avec un message PUT, j'essaie juste d'envoyer un petit contenu comme "bonjour" via put.libcurl (c api) READFUNCTION pour le blocage http PUT à jamais
Mon READFUNCTION pour les blocs de PUT pour une très grande quantité de temps (minutes) quand je suis le manuel à curl.haxx.se et retourner un 0 indiquant que j'ai fini le contenu. (sur os X) Quand je retourne quelque chose> 0 ceci réussit beaucoup plus vite (< 1 sec)
Quand je l'exécute sur ma machine Linux (Ubuntu 10.4) cet événement bloquant semble ne JAMAIS retourner quand je renvoies 0, si Je change le comportement pour retourner la taille écrite libcurl ajoute toutes les données dans le corps http envoyant beaucoup plus de données et il échoue avec un message "trop de données" du serveur. mon readfunction est ci-dessous, toute aide serait grandement appréciée. J'utilise 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;
}
}