mod socket_addr;
mod tcp;
mod udp;
pub use self::{
socket_addr::{
IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6, ToSocketAddrs,
},
tcp::{TcpListener, TcpStream},
udp::UdpSocket,
};
use crate::{StdError, StdResult};
fn each_addr<A: ToSocketAddrs, F, T>(addr: A, mut f: F) -> StdResult<T>
where
F: FnMut(StdResult<&SocketAddr>) -> StdResult<T>,
{
let addrs = match addr.to_socket_addrs() {
Ok(addrs) => addrs,
Err(e) => return f(Err(e)),
};
let mut last_err = None;
for addr in addrs {
match f(Ok(&addr)) {
Ok(l) => return Ok(l),
Err(e) => last_err = Some(e),
}
}
Err(last_err.unwrap_or(StdError::NoResolvedAddress))
}