diff options
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/finger.rs | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/modules/finger.rs b/src/modules/finger.rs index c61cfbe..34140c0 100644 --- a/src/modules/finger.rs +++ b/src/modules/finger.rs @@ -1,6 +1,9 @@ use { crate::{response::success, route::track_mount}, - std::io::{Read, Write}, + std::{ + io::{Read, Write}, + time::Duration, + }, windmark::response::Response, }; @@ -43,16 +46,26 @@ To visit my personal Finger server, <finger://fuwn.me>, you would visit <gemini: let mut stream = std::net::TcpStream::connect(url.to_string()).unwrap(); let mut buffer = [0; 1024]; + stream + .set_read_timeout(Some(Duration::from_secs(5))) + .expect("error: set_read_timeout failed"); + stream + .set_write_timeout(Some(Duration::from_secs(5))) + .expect("error: set_write_timeout failed"); stream.write_all(format!("{path}\n").as_bytes()).unwrap(); let mut response = String::new(); loop { - let bytes_read = stream.read(&mut buffer).unwrap(); + let bytes_read = match stream.read(&mut buffer) { + Ok(0) => break, + Ok(n) => n, + Err(e) => { + eprintln!("error: failed to read from socket: {:?}", e); - if bytes_read == 0 { - break; - } + break; + } + }; #[allow(unsafe_code)] response.push_str(unsafe { |