# tokio-icmp-echo
[![Latest Version](https://img.shields.io/crates/v/tokio-icmp-echo.svg)](https://crates.io/crates/tokio-icmp-echo/)
[![docs](https://docs.rs/tokio-icmp-echo/badge.svg)](https://docs.rs/tokio-icmp-echo)
tokio-icmp-echo is an asynchronous ICMP pinging library. It was originally written by Fedor Gogolev, a.k.a. knsd, and distributed under the name tokio-ping. This here is a fork that includes mostly maintenance work, to make sure it works in the current state of the async rust ecosystem.
# Usage example
Note, sending and receiving ICMP packets requires privileges.
```rust
extern crate futures;
extern crate tokio;
extern crate tokio_icmp_echo;
use futures::{Future, Stream};
fn main() {
let addr = std::env::args().nth(1).unwrap().parse().unwrap();
let pinger = tokio_icmp_echo::Pinger::new();
let stream = pinger.and_then(move |pinger| Ok(pinger.chain(addr).stream()));
let future = stream.and_then(|stream| {
stream.take(3).for_each(|mb_time| {
match mb_time {
Some(time) => println!("time={}", time),
None => println!("timeout"),
}
Ok(())
})
});
tokio::run(future.map_err(|err| {
eprintln!("Error: {}", err)
}))
}
```
# License
This project is licensed under either of
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or
http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.