The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

wget с ограничением на скорость прокачки (limit http ftp)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: limit, http, ftp,  (найти похожие документы)
From : Artem Chuprina 2:5020/371.32 26 Dec 00 13:32:32 Subj : wget с ограничением на скорость прокачки ------------------------------------------------------------------------------- From: Max Ischenko <max@malva.com.ua> At Tue, 26 Dec 2000 09:12:53 +0000 (UTC) Max Ischenko wrote: MI> А есть ли клиент для выкачивания ftp/http MI> поддерживающий ограничение на скорость прокачки? Сам писал, сам и отвечу. Может кому интересно. Hиже идет патч к wget-1.5.3. Пробовал --- работает. diff -upNr ../../wget-1.5.3-original/src/connect.c ./connect.c - --- ../../wget-1.5.3-original/src/connect.c Sun Mar 29 23:28:15 1998 +++ ./connect.c Sun Oct 1 09:54:49 2000 @@ -232,7 +232,23 @@ int iread (int fd, char *buf, int len) { int res; + static time_t lastaccess = 0; /* last second measured */ + static int received = 0; /* bytes received last second */ + static int iteration = 0; + static int bytes_per_iteration; + static int iterations_per_second; + if (!lastaccess) + lastaccess = time(0); + if (!opt.bandwidth_wait) + opt.bandwidth_wait = 50; + + iterations_per_second = 1000 / opt.bandwidth_wait; + bytes_per_iteration = ( opt.bandwidth_limit / (iterations_per_second+1) ); + + if (opt.bandwidth_limit > 0 && len < bytes_per_iteration) + opt.bandwidth_wait -= 10; + do { #ifdef HAVE_SELECT @@ -252,11 +268,39 @@ iread (int fd, char *buf, int len) return -1; } } + if (opt.bandwidth_limit) + { + struct timeval tv; + + if ( received >= bytes_per_iteration ) + { + bzero(&tv, sizeof(struct timeval)); + tv.tv_sec = opt.bandwidth_wait / 1000; /* full seconds */ + tv.tv_usec = (opt.bandwidth_wait % 1000) * 1000; /* microseconds */ + + select(0, NULL, NULL, NULL, &tv); + + received = 0; + iteration++; + } + if (len > bytes_per_iteration-received) + len = bytes_per_iteration-received; + } #endif res = READ (fd, buf, len); } while (res == -1 && errno == EINTR); + if (opt.bandwidth_limit) + { + received += res; /* increment received counter */ + if (lastaccess != time(0) && iteration >= iterations_per_second ) + { + iteration = 0; + lastaccess = time(0); + received = 0; + } + } return res; } diff -upNr ../../wget-1.5.3-original/src/init.c ./init.c - --- ../../wget-1.5.3-original/src/init.c Fri Sep 11 02:20:23 1998 +++ ./init.c Sun Oct 1 09:56:01 2000 @@ -213,6 +213,11 @@ defaults (void) opt.dot_bytes = 1024; opt.dot_spacing = 10; opt.dots_in_line = 50; + + /* <lukas@azzit.de>: bandwidth limitation */ + opt.bandwidth_limit = 0; /* unlimited */ + opt.bandwidth_wait = 200; /* wait 200ms by default */ + } . /* Return the user's home directory (strdup-ed), or NULL if none is diff -upNr ../../wget-1.5.3-original/src/main.c ./main.c - --- ../../wget-1.5.3-original/src/main.c Fri Sep 11 03:41:53 1998 +++ ./main.c Fri Apr 21 11:57:35 2000 @@ -144,6 +144,7 @@ Download:\n\ -w, --wait=SECONDS wait SECONDS between retrievals.\n\ -Y, --proxy=on/off turn proxy on or off.\n\ -Q, --quota=NUMBER set retrieval quota to NUMBER.\n\ + --bandwidth=NUMBER set the bandwidth limit in BYTES per sec\n\ \n"), _("\ Directories:\n\ -nd --no-directories don\'t create directories.\n\ @@ -234,6 +235,7 @@ main (int argc, char *const *argv) { "accept", required_argument, NULL, 'A' }, { "append-output", required_argument, NULL, 'a' }, { "backups", required_argument, NULL, 23 }, /* undocumented */ + { "bandwidth", required_argument, NULL, 24 }, { "base", required_argument, NULL, 'B' }, { "cache", required_argument, NULL, 'C' }, { "cut-dirs", required_argument, NULL, 17 }, @@ -436,6 +438,9 @@ GNU General Public License for more deta case 23: setval ("backups", optarg); break; + case 24: /* bandwidth limitation */ + opt.bandwidth_limit = atoi(optarg); + break; case 'A': setval ("accept", optarg); break; diff -upNr ../../wget-1.5.3-original/src/options.h ./options.h - --- ../../wget-1.5.3-original/src/options.h Tue Apr 28 23:29:40 1998 +++ ./options.h Sun Oct 1 10:01:00 2000 @@ -132,6 +132,9 @@ struct options int delete_after; /* Whether the files will be deleted after download. */ + int bandwidth_limit; /* <lukas@azzit.de>: bandwidth limitation in kb */ + int bandwidth_wait; /* <lukas@azzit.de>: milliseconds to wait when + bandwidth limit es reached */ }; #ifndef OPTIONS_DEFINED_HERE -- Hаpкотики, гейши, Цyнами, сакэ, хаpакиpи -- Вот что нас гyбит. --- ifmail v.2.15dev5 * Origin: somewhere in space... (2:5020/400)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру