diff options
| author | Fuwn <[email protected]> | 2024-06-24 21:59:38 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-06-24 21:59:38 -0700 |
| commit | 8b6b7ef1d983e92ebabd3993e415cebb645ea627 (patch) | |
| tree | fd22b8c6732f0a56ee8751e3265a25a9ec4789b5 /src | |
| parent | feat(modules): finger gateway (diff) | |
| download | locus-8b6b7ef1d983e92ebabd3993e415cebb645ea627.tar.xz locus-8b6b7ef1d983e92ebabd3993e415cebb645ea627.zip | |
feat(finger): add finger timeouts
Diffstat (limited to 'src')
| -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 { |