multi_threaded/
multi-threaded.rs1extern crate futures;
2extern crate tokio_core;
3extern crate tk_easyloop;
4
5use std::net::{TcpListener as StdListener, SocketAddr};
6use std::thread;
7use std::env;
8
9use futures::stream::Stream;
10use tokio_core::net::TcpListener;
11use tk_easyloop::{run, handle};
12
13
14fn main() {
15 let addr = env::args().nth(1).unwrap_or("127.0.0.1:7777".to_string());
16 let addr = addr.parse::<SocketAddr>().expect("parse address");
17
18 let socket = StdListener::bind(addr).expect("bind socket");
19 let mut threads = Vec::new();
20 for thread_no in 0..10 {
21 let lst = socket.try_clone().expect("cloning bind socket");
22 threads.push(thread::spawn(move || {
23 run(|| {
24 TcpListener::from_listener(lst, &addr, &handle())
25 .expect("listener created")
26 .incoming()
27 .for_each(|(_sock, addr)| {
28 println!("Accepted {} in thread {}", addr, thread_no);
29 Ok(())
30 })
31 })
32 }))
33 }
34 for t in threads {
35 t.join().expect("thread never joins").expect("accept never fails");
36 }
37}