summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authorDavid Dykstra <dwd@samba.org>2000-06-06 21:13:05 +0000
committerDavid Dykstra <dwd@samba.org>2000-06-06 21:13:05 +0000
commitef5d23ebcd67a59d2f89fbb5004c9ece4cc4d887 (patch)
treea91e45461e7bd9eb1f877a7d8587768879f51804 /io.c
parent27b9a19be0e90919fe8be3f939f9760d53b221c0 (diff)
downloadrsync-ef5d23ebcd67a59d2f89fbb5004c9ece4cc4d887.tar.gz
rsync-ef5d23ebcd67a59d2f89fbb5004c9ece4cc4d887.tar.bz2
rsync-ef5d23ebcd67a59d2f89fbb5004c9ece4cc4d887.zip
Add --bwlimit option contributed by Matthew Demicco and Jamie Gritton.
Diffstat (limited to 'io.c')
-rw-r--r--io.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/io.c b/io.c
index fbaf6a3a..20fc2ba3 100644
--- a/io.c
+++ b/io.c
@@ -27,6 +27,8 @@
/* if no timeout is specified then use a 60 second select timeout */
#define SELECT_TIMEOUT 60
+extern int bwlimit;
+
static int io_multiplexing_out;
static int io_multiplexing_in;
static int multiplex_in_fd;
@@ -388,6 +390,19 @@ static void writefd_unbuffered(int fd,char *buf,int len)
exit_cleanup(RERR_STREAMIO);
}
+ /* Sleep after writing to limit I/O bandwidth */
+ if (bwlimit)
+ {
+ tv.tv_sec = 0;
+ tv.tv_usec = ret * 1000 / bwlimit;
+ while (tv.tv_usec > 1000000)
+ {
+ tv.tv_sec++;
+ tv.tv_usec -= 1000000;
+ }
+ select(0, NULL, NULL, NULL, &tv);
+ }
+
total += ret;
if (io_timeout)