Bandwidth throttling: --bwlimit <KB/s> with token bucket

- protocol.h/c: io_set_bwlimit() + token bucket in send_n_data
  (64KB chunks, nanosleep-based deficit compensation)
- client_cli.c: --bwlimit <KB/s> flag
- test.py: bandwidth limit test case
This commit is contained in:
2026-07-16 15:42:16 +02:00
parent c2436bef59
commit 09a76e2a9a
4 changed files with 62 additions and 1 deletions
+6
View File
@@ -1,6 +1,7 @@
#include "client_send.h"
#include "config.h"
#include "log.h"
#include "protocol.h"
#include "utils.h"
#include <stdio.h>
#include <stdlib.h>
@@ -42,6 +43,7 @@ static void print_usage(void) {
printf(" --save-to-disk Write received files to disk\n");
printf(" --server-host <ip> Server IP address (default: 127.0.0.1)\n");
printf(" --server-port <n> Server port (default: 8080)\n");
printf(" --bwlimit <KB/s> Bandwidth limit in kilobytes per second\n");
printf(" --help Show this help\n");
}
@@ -127,6 +129,10 @@ int main(int argc, char *argv[]) {
server_host = str_dup(argv[++i]);
} else if (strcmp(argv[i], "--server-port") == 0 && i + 1 < argc) {
server_port = atoi(argv[++i]);
} else if (strcmp(argv[i], "--bwlimit") == 0 && i + 1 < argc) {
unsigned long long kbps = strtoull(argv[++i], NULL, 10);
io_set_bwlimit(kbps * 1024);
log_message(LOG_LEVEL_INFO, "Set bandwidth limit to %llu KB/s", kbps);
} else if (strcmp(argv[i], "--progress") == 0) {
config->show_progress = true;
} else if (strcmp(argv[i], "--chunk-size") == 0 && i + 1 < argc) {