diff --git a/src/main.rs b/src/main.rs index b716efa..f3ea28e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,7 +17,6 @@ use std::{ fn main() -> Result<()> { use clap::Parser; - let argument = Arc::new(Argument::parse()); // https://geminiprotocol.net/docs/protocol-specification.gmi#the-use-of-tls @@ -135,20 +134,26 @@ fn gemini( ) { Ok(()) => loop { let mut data = vec![0; argument.chunk]; - let l = item.file.read_at(&mut data, read as u64).unwrap(); - stream.write_all(&data[..l]).unwrap(); - read += l; - // println!("[{}] [info] [{peer}] Chunk sent: {l} ({read} total)", now()); - // EOF - if l == 0 { - println!("[{}] [info] [{peer}] Response: {read} bytes", now()); - match close(stream) { + match item.file.read_at(&mut data, read as u64) { + Ok(l) => match stream.write_all(&data[..l]) { Ok(()) => { - println!("[{}] [info] [{peer}] Connection closed by server.", now()) + // EOF + if l == 0 { + println!("[{}] [info] [{peer}] Response: {read} bytes", now()); + match close(stream) { + Ok(()) => println!( + "[{}] [info] [{peer}] Connection closed by server.", + now() + ), + Err(e) => println!("[{}] [warning] [{peer}] {e}", now()), + } + break; + } + read += l; } - Err(e) => println!("[{}] [warning] [{peer}] {e}", now()), - } - break; + Err(e) => println!("[{}] [error] [{peer}] {e}", now()), + }, + Err(e) => println!("[{}] [error] [{peer}] {e}", now()), } }, Err(e) => println!("[{}] [error] [{peer}] {e}", now()),