From 2bdee1320a6a7536dd6139d25206369cd72238f6 Mon Sep 17 00:00:00 2001 From: Caleb Webber Date: Fri, 1 Mar 2024 19:27:18 -0500 Subject: [PATCH] add echo server --- Cargo.lock | 7 +++++++ Cargo.toml | 3 +++ src/bin/smoke.rs | 27 +++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 Cargo.lock create mode 100644 src/bin/smoke.rs diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..b09b82e --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "protohackers" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 6bbe93a..3f2d7a4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,4 +5,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[[bin]] +name = "smoke" + [dependencies] diff --git a/src/bin/smoke.rs b/src/bin/smoke.rs new file mode 100644 index 0000000..9844813 --- /dev/null +++ b/src/bin/smoke.rs @@ -0,0 +1,27 @@ +use std::{io::{Read, Write}, net::TcpListener}; + +const PORT: usize = 10000; +const BUFF_SIZE: usize = 1; +fn main() -> std::io::Result<()> { + + let listener = TcpListener::bind(format!("127.0.0.1:{PORT}"))?; + + for stream in listener.incoming() { + match stream { + Ok(mut stream) => { + loop { + let mut buf: [u8; BUFF_SIZE] = [0; BUFF_SIZE]; + + if let Ok(_) = stream.read_exact(&mut buf) { + stream.write(&buf)?; + } else { + break; + } + } + }, + Err(e) => panic!("{:?}", e) + } + } + + Ok(()) +}