1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
use std::net::*; #[derive(Clone, Debug, Default)] pub struct Bind { sa4: Option<SocketAddrV4>, sa6: Option<SocketAddrV6>, } impl Bind { pub fn sa4(&self) -> SocketAddr { SocketAddr::V4(self.sa4.unwrap_or_else(|| { let addr = Ipv4Addr::new(0, 0, 0, 0); let port = 0; SocketAddrV4::new(addr, port) })) } pub fn sa6(&self) -> SocketAddr { SocketAddr::V6(self.sa6.unwrap_or_else(|| { let addr = Ipv6Addr::from([0u8; 16]); let port = 0; SocketAddrV6::new(addr, port, 0, 0) })) } pub fn set(&mut self, addr: IpAddr) { match addr { IpAddr::V4(ip) => self.sa4 = Some(SocketAddrV4::new(ip, 0)), IpAddr::V6(ip) => self.sa6 = Some(SocketAddrV6::new(ip, 0, 0, 0)), } } }