aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-06-24 21:59:38 -0700
committerFuwn <[email protected]>2024-06-24 21:59:38 -0700
commit8b6b7ef1d983e92ebabd3993e415cebb645ea627 (patch)
treefd22b8c6732f0a56ee8751e3265a25a9ec4789b5 /src
parentfeat(modules): finger gateway (diff)
downloadlocus-8b6b7ef1d983e92ebabd3993e415cebb645ea627.tar.xz
locus-8b6b7ef1d983e92ebabd3993e415cebb645ea627.zip
feat(finger): add finger timeouts
Diffstat (limited to 'src')
-rw-r--r--src/modules/finger.rs23
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 {