1 unstable release
0.3.0 | Feb 5, 2025 |
---|
#1320 in Network programming
240 downloads per month
Used in detsys-ids-client
34KB
615 lines
detsys-srv
Rust client for communicating with services located by DNS SRV records.
Introduction
SRV Records, as defined in RFC 2782, are DNS records of the form
_Service._Proto.Name TTL Class SRV Priority Weight Port Target
For instance, a DNS server might respond with the following SRV records for
_http._tcp.example.com
:
_http._tcp.example.com. 60 IN SRV 1 100 443 test1.example.com.
_http._tcp.example.com. 60 IN SRV 2 50 443 test2.example.com.
_http._tcp.example.com. 60 IN SRV 2 50 443 test3.example.com.
A client wanting to communicate with this example service would first try to
communicate with test1.example.com:443
(the record with the lowest
priority), then with the other two (in a random order, since they are of the
same priority) should the first be unavailable.
detsys-srv
handles the lookup and caching of SRV records as well as the ordered
selection of targets to use for communication with SRV-located services.
SrvClient::new
creates a client (that should be reused to take advantage of
caching) for communicating with the service located by _http._tcp.example.com
.
SrvClient::execute
takes in a future-producing closure (emulating async
closures, which are currently unstable) and executes the closure on a series of
targets parsed from the discovered SRV records, stopping and returning the
first Ok
or last Err
it obtains.
Alternative Resolvers and Target Selection Policies
detsys-srv
provides multiple resolver backends for SRV lookup and by default uses
a target selection policy that maintains affinity for the last target it has
used successfully. Both of these behaviors can be changed by implementing the
SrvResolver
and Policy
traits, respectively.
Contributing
- Clone the repo
- Make some changes
- Test:
cargo test
- Format:
cargo fmt
- Clippy:
cargo clippy --tests -- -Dclippy::all
- If modifying crate-level docs (
src/lib.rs
) orREADME.tpl
, updateREADME.md
:cargo install cargo-readme
cargo readme > README.md
History
Forked from https://github.com/deshaw/srv-rs/.
Dependencies
~9–15MB
~191K SLoC