multi_threaded/
multi-threaded.rs

1extern 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}