Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ If your platform isn't covered, see [Building from Source](#building-from-source
| `--bind-port` | `33333` | 1..65535 | Local port to bind on |
| `--mtu` | `1500` | 64..65507 | Max packet size in bytes |
| `--ttl` | `15` | > 0 | Seconds of silence before giving up |
| `--delay-ms` | `20` | ≥ 0 | Pause between successive packets (use `0` for loopback / tests) |
| `-h, --help` | — | — | Print help |
| `--version` | — | — | Print version |

Expand Down
7 changes: 4 additions & 3 deletions src/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

std::string fileName;

int mtu = 0;
int ttl = 0;
int ttl_max = 0;
int mtu = 0;
int ttl = 0;
int ttl_max = 0;
int delay_ms = 0;

SOCKET _socket;

Expand Down
2 changes: 2 additions & 0 deletions src/Config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ extern int mtu; // Max packet size to send and receive
extern int ttl; // Current wait time for new packages before shutting down
extern int ttl_max; // Maximum wait time for new packages before shutting down

extern int delay_ms; // Inter-packet pause when blasting parts / RESENDs

extern SOCKET _socket;

extern SOCKADDR_IN server_address;
Expand Down
7 changes: 7 additions & 0 deletions src/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ int main(int argc, char* argv[]) {
("bind-port", "Local port to bind on", cxxopts::value<int>()->default_value("33333"))
("mtu", "MTU packet", cxxopts::value<int>()->default_value("1500"))
("ttl", "Time to live", cxxopts::value<int>()->default_value("15"))
("delay-ms", "Delay between successive packets, ms", cxxopts::value<int>()->default_value("20"))
("h,help", "Print help")
("version", "Print version");

Expand All @@ -64,6 +65,7 @@ int main(int argc, char* argv[]) {
int parsed_ttl = result["ttl"].as<int>();
int parsed_port = result["port"].as<int>();
int parsed_bind_port = result["bind-port"].as<int>();
int parsed_delay_ms = result["delay-ms"].as<int>();

if (parsed_mtu < 64 || parsed_mtu > 65507) {
std::cerr << "Error: --mtu must be between 64 and 65507" << std::endl;
Expand All @@ -81,6 +83,10 @@ int main(int argc, char* argv[]) {
std::cerr << "Error: --bind-port must be between 1 and 65535" << std::endl;
return 1;
}
if (parsed_delay_ms < 0) {
std::cerr << "Error: --delay-ms must be 0 or greater" << std::endl;
return 1;
}

const std::string type = result["type"].as<std::string>();
if (type != "sender" && type != "receiver") {
Expand All @@ -102,6 +108,7 @@ int main(int argc, char* argv[]) {
mtu = parsed_mtu;
ttl = parsed_ttl;
ttl_max = parsed_ttl;
delay_ms = parsed_delay_ms;
fileName = result["file"].as<std::string>();

_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
Expand Down
2 changes: 1 addition & 1 deletion src/Receiver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ void checkParts() {
sendto(_socket, buffer, 10, 0, reinterpret_cast<sockaddr*>(&broadcast_address),
sizeof(broadcast_address));
std::cout << "Request part of file with index " << index << std::endl;
std::this_thread::sleep_for(20ms);
if (delay_ms > 0) std::this_thread::sleep_for(std::chrono::milliseconds(delay_ms));
}

SOCKADDR_IN sender_address;
Expand Down
2 changes: 1 addition & 1 deletion src/Sender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ void run() {
for (size_t part_index = 0; part_index < total_parts; ++part_index) {
sent_part.insert({ part_index, 0 });
sendPart(part_index);
std::this_thread::sleep_for(20ms);
if (delay_ms > 0) std::this_thread::sleep_for(std::chrono::milliseconds(delay_ms));
}

snprintf(buffer, 7, "FINISH");
Expand Down
12 changes: 8 additions & 4 deletions tests/e2e.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,12 @@ run_test() {
dd if=/dev/urandom of="$src" bs=1024 count="$size_kb" status=none

# Receiver listens on $recv_port, sends RESEND back to $send_port (sender's bind).
# --delay-ms 0 removes the inter-packet pause that the protocol uses on real
# LANs to avoid overrunning receivers; on loopback it just slows tests down.
echo "==> [$label] starting receiver (bind=$recv_port, target=$send_port)"
"$BINARY" --type receiver --file "$dst" --broadcast 127.0.0.1 \
--bind-port "$recv_port" --port "$send_port" --ttl "$recv_ttl" \
--delay-ms 0 \
> "$recv_log" 2>&1 &
local recv_pid=$!

Expand All @@ -51,6 +54,7 @@ run_test() {
echo "==> [$label] starting sender (bind=$send_port, target=$recv_port)"
if ! "$BINARY" --type sender --file "$src" --broadcast 127.0.0.1 \
--bind-port "$send_port" --port "$recv_port" --ttl "$send_ttl" \
--delay-ms 0 \
> "$send_log" 2>&1; then
echo "FAIL: [$label] sender exited non-zero"
echo "--- sender log:"; cat "$send_log"
Expand Down Expand Up @@ -90,11 +94,11 @@ run_test() {

# Args: label, size_kb, recv_bind_port, send_bind_port, recv_ttl, send_ttl
#
# Small file: 50 KiB -> ~35 parts at default MTU 1500, ~0.7s transfer.
run_test "small" 50 33401 33402 5 3
# Small file: 50 KiB -> ~35 parts at default MTU 1500.
run_test "small" 50 33401 33402 3 1

# Large file: 2 MiB -> ~1400 parts at default MTU 1500, ~28s transfer.
run_test "large" 2048 33403 33404 60 30
# Large file: 2 MiB -> ~1400 parts at default MTU 1500.
run_test "large" 2048 33403 33404 3 1

echo
echo "All E2E tests passed."
Loading