1#![doc = include_str!("../readme.md")]
5#![forbid(unsafe_code)]
6#![warn(missing_docs)]
7
8mod address_endpoint;
9mod bind_endpoint;
10mod composite_endpoint;
11mod connect_endpoint;
12mod host_endpoint;
13
14pub use address_endpoint::AddressEndpoint;
15pub use bind_endpoint::{BindEndpoint, BindOptions};
16pub use composite_endpoint::CompositeEndpoint;
17pub use connect_endpoint::ConnectEndpoint;
18pub use host_endpoint::HostEndpoint;
19
20pub mod stream;
21pub mod tls;
22
23use base_scheduler::{OperationError, SocketClose};
24use std::io;
25
26fn no_addresses() -> OperationError {
27 io::Error::new(io::ErrorKind::AddrNotAvailable, "endpoint has no addresses").into()
28}
29
30async fn rollback<S: SocketClose + ?Sized>(scheduler: &S, sockets: Vec<S::Socket>) {
32 for socket in sockets {
33 let _ = scheduler.socket_close(socket).await;
34 }
35}