diff options
Diffstat (limited to 'karld/src/interface/tcp.rs')
-rw-r--r-- | karld/src/interface/tcp.rs | 24 |
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); + } + }); + } +} |