[package]
name = "mioco_test"
version = "0.1.0"
[dependencies]
mioco = "0.3.0"
env_logger = "*"
log = "*"
simple-signal = "1.0.5"
src/main.rs
#[macro_use]
extern crate log;
extern crate env_logger;
extern crate simple_signal;
extern crate mioco;
use mioco::tcp;
use simple_signal::{Signals, Signal};
use std::{net,str};
const DEFAULT_LISTEN_ADDR : &'static str = "0.0.0.0:45678";
fn listend_addr() -> net::SocketAddr {
str::FromStr::from_str(DEFAULT_LISTEN_ADDR).unwrap()
}
fn main() {
env_logger::init().unwrap();
info!("Starting...");
// Handle signals
let (shutdown_tx, shutdown_rx) = mioco::sync::mpsc::channel();
Signals::set_handler(&[Signal::Term, Signal::Int], move |_signals| {
info!("Recieved signal {:?}, stopping...", _signals);
shutdown_tx.send(()).unwrap();
});
mioco::start(move ||{
// Handle shutdown
mioco::spawn(move ||{
let _ = shutdown_rx.recv();
mioco::shutdown();
});
let addr = listend_addr();
let listener = tcp::TcpListener::bind(&addr).unwrap();
info!("Started.");
let _ = try!(listener.accept());
Ok(())
});
info!("Stopped.");
}
Output:
Protheseus:mioco_test muelleto$ RUST_LOG=mioco_test=debug cargo run
Running `target/debug/mioco_test`
INFO:mioco_test: Starting...
INFO:mioco_test: Started.
^CINFO:mioco_test: Recieved signal [Int], stopping...
thread '<main>' panicked at 'coroutine::jump_in: wrong state Blocked', /Users/muelleto/.multirust/toolchains/nightly/cargo/registry/src/github.com-88ac128001ac3a9a/mioco-0.3.0/src/coroutine.rs:555
note: Run with `RUST_BACKTRACE=1` for a backtrace.
Reported in #77
Cargo.toml
src/main.rs
Output: