[][src]Struct libp2p_mdns::service::MdnsService

pub struct MdnsService { /* fields omitted */ }

A running service that discovers libp2p peers and responds to other libp2p peers' queries on the local network.

Usage

In order to use mDNS to discover peers on the local network, use the MdnsService. This is done by creating a MdnsService then polling it in the same way as you would poll a stream.

Polling the MdnsService can produce either an MdnsQuery, corresponding to an mDNS query received by another node on the local network, or an MdnsResponse corresponding to a response to a query previously emitted locally. The MdnsService will automatically produce queries, which means that you will receive responses automatically.

When you receive an MdnsQuery, use the respond method to send back an answer to the node that emitted the query.

When you receive an MdnsResponse, use the provided methods to query the information received in the response.

Example

let mut service = MdnsService::new().expect("Error while creating mDNS service");
let _future_to_poll = futures::stream::poll_fn(move || -> Poll<Option<()>, io::Error> {
    loop {
        let packet = match service.poll() {
            Async::Ready(packet) => packet,
            Async::NotReady => return Ok(Async::NotReady),
        };

        match packet {
            MdnsPacket::Query(query) => {
                println!("Query from {:?}", query.remote_addr());
                query.respond(
                    my_peer_id.clone(),
                    my_listened_addrs.clone(),
                    Duration::from_secs(120),
                );
            }
            MdnsPacket::Response(response) => {
                for peer in response.discovered_peers() {
                    println!("Discovered peer {:?}", peer.id());
                    for addr in peer.addresses() {
                        println!("Address = {:?}", addr);
                    }
                }
            }
            MdnsPacket::ServiceDiscovery(query) => {
                query.respond(std::time::Duration::from_secs(120));
            }
        }
    }
}).for_each(|_| Ok(()));

Methods

impl MdnsService[src]

pub fn new() -> Result<MdnsService>[src]

Starts a new mDNS service.

pub fn silent() -> Result<MdnsService>[src]

Same as new, but we don't send automatically send queries on the network.

pub fn poll(&mut self) -> Async<MdnsPacket>[src]

Polls the service for packets.

Trait Implementations

impl Debug for MdnsService[src]

Auto Trait Implementations

impl Send for MdnsService

impl Sync for MdnsService

Blanket Implementations

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> Erased for T