1use crate::common::*;
3use std::fmt::Debug;
4use std::net::{SocketAddr, ToSocketAddrs};
5use crate::get_free_tcp_address;
9
10pub struct Server {
13 pub address: SocketAddr,
14}
15
16impl Server {
18 pub fn bind(addr: impl ToSocketAddrs + Debug) -> Self {
20 let addrs: Vec<_> = addr.to_socket_addrs().expect("bad address").collect();
21 assert!(addrs.len() > 0, "invalid server address: {addr:?}");
22 Self { address: addrs[0] }
23 }
24
25 pub fn try_bind_auto() -> Result<Self> {
27 let address = get_free_tcp_address().ok_or(format_err!("no free tcp addr"))?;
28 Ok(Self { address })
29 }
30}
31