(lib)CURL & bandbreitenlimit



  • hallo!

    ich arbeite gerade an einem kleinen tool um dateien zu transferieren.

    dabei möchte ich eine funktion implementieren,die erlaubt sowohl beim upload als auch beim download ein bandbreiten limit anzugeben.

    ich weiss,dass curl für diesen zweck etwas zur verfügung stellt,leider handhabt curl intern das ganze folgendermassen:

    es wird die gesendete/empfange datenmenge pro zeiteinheit gemessen,falls der durchschnittswert über dem angegebenen limit liegt wird der socket geblockt,ansonsten wird fröhlich weiter gesendet.

    das ganze hat leider den nachteil,dass "spikes" auftreten.gemittelt über die zeit wird das bandbreiten limit zwar eingehalten,aber es gibt regelmässig "ausreisser".

    beispielsweise wird 10kb als limit eingestellt,dann uploaded er und geht bis 25 oder 30kb,dann greift das limit,socket wird geblockt und upload fällt wieder unter das gesetzte limit.

    gerade bei "schwachen" internet verbindungen à la dsl light fallen diese spikes doch sehr ins gewicht und es nicht möglich,nebenher das internet noch zu nutzen(selbst wenn man das limit auf 1kb setzt).

    meine idee wäre,dass man curl selbst jede sekunde eine bestimmte "datenportion" vorsetzt und diese senden lässt.somit könnte man die ausreisser umgehen.

    hat jemand bereits erfahrung mit so etwas oder ein ähnliches problem gehabt?
    könnte man so etwas mit einem read callback realisieren?

    vielleicht gibt es auch noch elegantere lösungen für mein problem,bin für jede hilfe dankbar!

    lg
    Max



  • könnte man so etwas mit einem read callback realisieren?

    nö.
    libcurl wird vermutlich grössere blöcke als ein paar byte anfordern. wenn z.b. 64kb angefordert werden, muss der read-callback die irgendwann zurückgeben. dann hat libcurl 64kb an daten, die es als ganzes verschicken kann.

    im einfachsten fall gibt es in libcurl irgendwo eine blockgrösse die man anpassen kann (kleiner machen kann). wenn die jetzt z.b. auch 20 oder 30 kb ist, und man die auf z.b. 1,5 kb runterdreht, könnte das schon was bringen.

    EDIT: 1,4 kb wäre vermutlich besser 🙂


Anmelden zum Antworten