aboutsummaryrefslogtreecommitdiff
path: root/karld/src/interface/tcp.rs
diff options
context:
space:
mode:
Diffstat (limited to 'karld/src/interface/tcp.rs')
-rw-r--r--karld/src/interface/tcp.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/karld/src/interface/tcp.rs b/karld/src/interface/tcp.rs
new file mode 100644
index 0000000..2225f4a
--- /dev/null
+++ b/karld/src/interface/tcp.rs
@@ -0,0 +1,24 @@
+use crate::interface::generic::generic_handle_connection;
+use crate::CLIENT_ID_COUNTER;
+use karlcommon::interfaces::tcp_addr;
+use log::{info, warn};
+use std::net::TcpListener;
+use std::thread;
+
+pub fn run() {
+ let listener = TcpListener::bind(tcp_addr()).unwrap();
+ info!("listening.");
+
+ loop {
+ let (stream, addr) = listener.accept().unwrap();
+ let id = CLIENT_ID_COUNTER.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
+ thread::spawn(move || {
+ info!("client connected: {:?}", addr);
+ if let Err(err) = generic_handle_connection(id, stream.try_clone().unwrap(), stream) {
+ warn!("client dropped: {:?} ({})", addr, err);
+ } else {
+ info!("client dropped: {:?}", addr);
+ }
+ });
+ }
+}