Struct libp2p_mdns::service::MdnsService [−][src]
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 _future_to_poll = async { let (mut service, packet) = service.next().await; match packet { MdnsPacket::Query(query) => { println!("Query from {:?}", query.remote_addr()); let resp = build_query_response( query.query_id(), my_peer_id.clone(), vec![].into_iter(), Duration::from_secs(120), ).unwrap(); service.enqueue_response(resp); } MdnsPacket::Response(response) => { for peer in response.discovered_peers() { println!("Discovered peer {:?}", peer.id()); for addr in peer.addresses() { println!("Address = {:?}", addr); } } } MdnsPacket::ServiceDiscovery(disc) => { let resp = build_service_discovery_response( disc.query_id(), Duration::from_secs(120), ); service.enqueue_response(resp); } } };
Implementations
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 automatically send queries on the network.
pub fn enqueue_response(&mut self, rsp: Vec<u8>)
[src]
pub async fn next(self) -> (Self, MdnsPacket)
[src]
Returns a future resolving to itself and the next received MdnsPacket
.
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for MdnsService
impl Send for MdnsService
impl Sync for MdnsService
impl Unpin for MdnsService
impl !UnwindSafe for MdnsService
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Same<T> for T
[src]
type Output = T
Should always be Self
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
[src]
V: MultiLane<T>,