diff options
author | Daniel Stenberg <daniel@haxx.se> | 2000-10-03 11:02:52 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2000-10-03 11:02:52 +0000 |
commit | f1b8566ea28d1256cf533f5fe07a6662041a6c5d (patch) | |
tree | f8e73be665e48d8671aa5248de8305f156930b6c /lib | |
parent | d3f9b2a49051e512c0daa8fccdee7231fadff015 (diff) |
new upload-buffer size design that starts with a smallish buffer and increases
its size in case of need
Diffstat (limited to 'lib')
-rw-r--r-- | lib/highlevel.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/highlevel.c b/lib/highlevel.c index f0a6a6810..c3b6269e1 100644 --- a/lib/highlevel.c +++ b/lib/highlevel.c @@ -112,6 +112,10 @@ #define _MPRINTF_REPLACE /* use our functions only */ #include <curl/mprintf.h> +#ifndef min +#define min(a, b) ((a) < (b) ? (a) : (b)) +#endif + CURLcode _Transfer(struct connectdata *c_conn) { @@ -522,7 +526,7 @@ _Transfer(struct connectdata *c_conn) if(data->crlf) buf = data->buffer; /* put it back on the buffer */ - nread = data->fread(buf, 1, BUFSIZE, data->in); + nread = data->fread(buf, 1, conn->upload_bufsize, data->in); /* the signed int typecase of nread of for systems that has unsigned size_t */ @@ -570,6 +574,15 @@ _Transfer(struct connectdata *c_conn) if (urg) return urg; + if(data->progress.ulspeed > conn->upload_bufsize) { + /* If we're transfering more data per second than fits in our buffer, + we increase the buffer size to adjust to the current + speed. However, we must not set it larger than BUFSIZE. We don't + adjust it downwards again since we don't see any point in that! + */ + conn->upload_bufsize=(long)min(data->progress.ulspeed, BUFSIZE); + } + if (data->timeout && (tvdiff (now, start) > data->timeout)) { failf (data, "Operation timed out with %d out of %d bytes received", bytecount, conn->size); |