mirror of
				https://github.com/async-rs/async-std.git
				synced 2025-11-04 02:36:39 +00:00 
			
		
		
		
	* Implement an async version of ToSocketAddrs * fix documentation issue * genius hack: pretending to be `impl Future` * replace `std::net::ToSocketAddrs` with `async-std::net::ToSocketAddrs` * Move unit tests into the tests directory * Stylistic changes * Remove re-exports in async_std::net * fix broken link * some mirror changes * remove unnecessary format * migrate: `std::net::ToSocketAddrs` -> `async_std::net::ToSocketAddrs` * fix typo(tutorial) * remove unnecessary type bound * lifetime for future
		
			
				
	
	
		
			84 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
 | 
						|
 | 
						|
use async_std::net::ToSocketAddrs;
 | 
						|
use async_std::task;
 | 
						|
 | 
						|
fn blocking_resolve<A>(a: A) -> Result<Vec<SocketAddr>, String>
 | 
						|
where
 | 
						|
    A: ToSocketAddrs,
 | 
						|
    A::Iter: Send,
 | 
						|
{
 | 
						|
    let socket_addrs = task::block_on(a.to_socket_addrs());
 | 
						|
    match socket_addrs {
 | 
						|
        Ok(a) => Ok(a.collect()),
 | 
						|
        Err(e) => Err(e.to_string()),
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn to_socket_addr_ipaddr_u16() {
 | 
						|
    let a = Ipv4Addr::new(77, 88, 21, 11);
 | 
						|
    let p = 12345;
 | 
						|
    let e = SocketAddr::V4(SocketAddrV4::new(a, p));
 | 
						|
    assert_eq!(Ok(vec![e]), blocking_resolve((a, p)));
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn to_socket_addr_str_u16() {
 | 
						|
    let a = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(77, 88, 21, 11), 24352));
 | 
						|
    assert_eq!(Ok(vec![a]), blocking_resolve(("77.88.21.11", 24352)));
 | 
						|
 | 
						|
    let a = SocketAddr::V6(SocketAddrV6::new(
 | 
						|
        Ipv6Addr::new(0x2a02, 0x6b8, 0, 1, 0, 0, 0, 1),
 | 
						|
        53,
 | 
						|
        0,
 | 
						|
        0,
 | 
						|
    ));
 | 
						|
    assert_eq!(Ok(vec![a]), blocking_resolve(("2a02:6b8:0:1::1", 53)));
 | 
						|
 | 
						|
    let a = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 23924));
 | 
						|
    #[cfg(not(target_env = "sgx"))]
 | 
						|
    assert!(blocking_resolve(("localhost", 23924)).unwrap().contains(&a));
 | 
						|
    #[cfg(target_env = "sgx")]
 | 
						|
    let _ = a;
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn to_socket_addr_str() {
 | 
						|
    let a = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(77, 88, 21, 11), 24352));
 | 
						|
    assert_eq!(Ok(vec![a]), blocking_resolve("77.88.21.11:24352"));
 | 
						|
 | 
						|
    let a = SocketAddr::V6(SocketAddrV6::new(
 | 
						|
        Ipv6Addr::new(0x2a02, 0x6b8, 0, 1, 0, 0, 0, 1),
 | 
						|
        53,
 | 
						|
        0,
 | 
						|
        0,
 | 
						|
    ));
 | 
						|
    assert_eq!(Ok(vec![a]), blocking_resolve("[2a02:6b8:0:1::1]:53"));
 | 
						|
 | 
						|
    let a = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 23924));
 | 
						|
    #[cfg(not(target_env = "sgx"))]
 | 
						|
    assert!(blocking_resolve("localhost:23924").unwrap().contains(&a));
 | 
						|
    #[cfg(target_env = "sgx")]
 | 
						|
    let _ = a;
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn to_socket_addr_string() {
 | 
						|
    let a = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(77, 88, 21, 11), 24352));
 | 
						|
    let s: &str = "77.88.21.11:24352";
 | 
						|
    assert_eq!(Ok(vec![a]), blocking_resolve(s));
 | 
						|
 | 
						|
    let s: &String = &"77.88.21.11:24352".to_string();
 | 
						|
    assert_eq!(Ok(vec![a]), blocking_resolve(s));
 | 
						|
 | 
						|
    let s: String = "77.88.21.11:24352".to_string();
 | 
						|
    assert_eq!(Ok(vec![a]), blocking_resolve(s));
 | 
						|
}
 | 
						|
 | 
						|
// FIXME: figure out why this fails on openbsd and fix it
 | 
						|
#[test]
 | 
						|
#[cfg(not(any(windows, target_os = "openbsd")))]
 | 
						|
fn to_socket_addr_str_bad() {
 | 
						|
    assert!(blocking_resolve("1200::AB00:1234::2552:7777:1313:34300").is_err());
 | 
						|
}
 |