2010-04-10 6 views
1

Je voudrais savoir comment vérifier la vitesse d'un fichier en cours de téléchargement en temps réel en utilisant la bibliothèque curl en C++. Voilà ce que je l'ai écrit:Options de connexion Curl

curl_easy_getinfo(curl,CURLINFO_SPEED_UPLOAD,&c); 

Mais le manuel dit que cela montre la vitesse moyenne, mais même cela ne semble pas travailler avec moi, parce que je ne peux voir un 0.

Il y a une chose de plus: Comment définir une limite de téléchargement qui fonctionne, car si j'écris ceci:

curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, 100); 

Je reçois un message d'erreur 502.

+0

La erreur 502 vous mentionnez un état HTTP? – outis

Répondre

3

Des curl_easy_getinfo docs:

CURLINFO_SPEED_UPLOAD

passer un pointeur vers un double pour recevoir la vitesse moyenne de téléchargement qui s'enroulent mesurée pour la complète [italiques ajoutés] téléchargement. Mesuré en octets/seconde.

CURLINFO_SPEED_UPLOAD ne fonctionne que lorsque la mise à jour est terminée. Au lieu de cela, écrivez un rappel de progression et définissez CURLOPT_PROGRESSFUNCTION. Avoir votre fonction de progression calculer le exponential moving average pour la vitesse actuelle.

progress(curl, fd, len): 
    now = time() 
    speed = len/(now-then) * weight + speed * (1-weight) 
    update progress display 
    then=now 

Comme toujours, la vitesse du réseau est une approximation.

0

Je vous recommande également de passer un long au lieu d'un int. (Ils ne sont pas toujours la même taille, et curl_easy_setopt attend une longue.

curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, 100L) 
0

Selon la documentation curl_easy_setopt vous devez passer un curl_off_t comme paramètre pour CURLOPT_MAX_SEND_SPEED_LARGE, qui est un long long. (Cela peut être nouveau puisque les autres réponses ont été données.)

CURLOPT_MAX_SEND_SPEED_LARGE

Passez un entier curl_off_t comme paramètre. Si un téléchargement ex cette vitesse (comptée en octets par seconde) sur la moyenne cumulative pendant le transfert , le transfert s'arrêtera pour maintenir le taux moyen inférieur à ou égal à la valeur du paramètre. Par défaut à une vitesse illimitée.

Cette option n'affecte pas les vitesses de transfert effectuées avec les URL FILE: //. (ajouté à 7.15.5)

Exemple:

curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, 1024LL);