Skip to main content

Endpoint

Struct Endpoint 

Source
pub struct Endpoint { /* private fields */ }
Expand description

Handle to a running mDNS endpoint.

Cloneable; every clone shares the same underlying driver task. The driver task is spawned at Self::server time and exits when the last clone (and every derived Service / Query handle) is dropped — detected via Rc::strong_count(&inner) == 1 inside the driver loop.

Implementations§

Source§

impl Endpoint

Source

pub async fn server(opts: ServerOptions) -> Result<Self, ServerError>

Bind the multicast sockets configured in opts and spawn the driver task on the current compio runtime.

Source

pub fn stats(&self) -> StatsSnapshot

Available on crate feature stats only.

Return a point-in-time snapshot of the I/O + protocol counters for this endpoint.

Delegates to the shared stats::Stats instance owned by the proto endpoint (and shared with the driver I/O paths), so the snapshot covers wire-level rx/tx as well as protocol-level events.

Source

pub async fn register_service( &self, spec: ServiceSpec, ) -> Result<Service, RegisterError>

Register a new service.

Returns a Service handle for receiving ServiceUpdate events; dropping the handle implicitly unregisters the service. Drop encodes the RFC 6762 §10.1 goodbye records and tears down the proto state synchronously; the driver task then multicasts the queued TTL=0 datagrams a few times for loss resilience.

Source

pub async fn start_query( &self, spec: QuerySpec, ) -> Result<Query, StartQueryError>

Start a query against the endpoint.

Returns a Query handle for receiving QueryEvent events; dropping the handle implicitly cancels the query (the driver removes the proto state machine on its next loop iteration).

Source

pub async fn browse(&self, param: QueryParam) -> Result<Lookup, StartQueryError>

Browse for instances of a DNS-SD service type, resolving each into a ServiceEntry. See Lookup and QueryParam.

Source

pub async fn lookup( &self, service: Name, timeout: Duration, ) -> Result<Lookup, StartQueryError>

Convenience for Self::browse with default parameters and the given browse timeout.

Source

pub async fn resolve_host( &self, host: Name, timeout: Duration, ) -> Result<Vec<IpAddr>, StartQueryError>

Resolve a host name to its addresses via mDNS A / AAAA queries (RFC 6762), without the DNS-SD browse/resolve chain.

Issues both queries and collects every advertised address for the timeout window (the answer window for multicast responses), returning them IPv4 first then IPv6, deduplicated and capped per family. The result is empty if nothing answers. Unlike Self::resolve_instance this does not require — or interpret — DNS-SD records; it is the multicast analogue of resolving a hostname.

Source

pub async fn resolve_instance( &self, instance: Name, timeout: Duration, ) -> Result<Option<ServiceEntry>, StartQueryError>

Resolve a known DNS-SD service instance directly into a ServiceEntry, skipping the PTR browse step (e.g. Name::try_from_str("Office._ipp._tcp.local.")).

Issues SRV + TXT for the instance and A / AAAA for the SRV target host, and returns the first complete resolution — host + port, TXT, and at least one address — or None if it does not complete within timeout. Use Self::browse instead when the instance names are not known in advance.

Trait Implementations§

Source§

impl Clone for Endpoint

Source§

fn clone(&self) -> Endpoint

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Drop for Endpoint

Wake the driver when an Endpoint clone is dropped so it can promptly observe Rc::strong_count(&inner) == 1 and exit (per the exit-condition contract). Without this notify, the driver would only notice the dropped handle the next time it woke for a recv / timer event.

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more