1 #![warn(rust_2018_idioms)] 2 #![cfg(all(feature = "full", not(tokio_wasi)))] // Wasi doesn't support bind 3 4 use std::time::Duration; 5 use tokio::net::TcpSocket; 6 use tokio_test::assert_ok; 7 8 #[tokio::test] basic_usage_v4()9async fn basic_usage_v4() { 10 // Create server 11 let addr = assert_ok!("127.0.0.1:0".parse()); 12 let srv = assert_ok!(TcpSocket::new_v4()); 13 assert_ok!(srv.bind(addr)); 14 15 let srv = assert_ok!(srv.listen(128)); 16 17 // Create client & connect 18 let addr = srv.local_addr().unwrap(); 19 let cli = assert_ok!(TcpSocket::new_v4()); 20 let _cli = assert_ok!(cli.connect(addr).await); 21 22 // Accept 23 let _ = assert_ok!(srv.accept().await); 24 } 25 26 #[tokio::test] 27 #[cfg(not(tokio_no_ipv6))] basic_usage_v6()28async fn basic_usage_v6() { 29 // Create server 30 let addr = assert_ok!("[::1]:0".parse()); 31 let srv = assert_ok!(TcpSocket::new_v6()); 32 assert_ok!(srv.bind(addr)); 33 34 let srv = assert_ok!(srv.listen(128)); 35 36 // Create client & connect 37 let addr = srv.local_addr().unwrap(); 38 let cli = assert_ok!(TcpSocket::new_v6()); 39 let _cli = assert_ok!(cli.connect(addr).await); 40 41 // Accept 42 let _ = assert_ok!(srv.accept().await); 43 } 44 45 #[tokio::test] bind_before_connect()46async fn bind_before_connect() { 47 // Create server 48 let any_addr = assert_ok!("127.0.0.1:0".parse()); 49 let srv = assert_ok!(TcpSocket::new_v4()); 50 assert_ok!(srv.bind(any_addr)); 51 52 let srv = assert_ok!(srv.listen(128)); 53 54 // Create client & connect 55 let addr = srv.local_addr().unwrap(); 56 let cli = assert_ok!(TcpSocket::new_v4()); 57 assert_ok!(cli.bind(any_addr)); 58 let _cli = assert_ok!(cli.connect(addr).await); 59 60 // Accept 61 let _ = assert_ok!(srv.accept().await); 62 } 63 64 #[tokio::test] basic_linger()65async fn basic_linger() { 66 // Create server 67 let addr = assert_ok!("127.0.0.1:0".parse()); 68 let srv = assert_ok!(TcpSocket::new_v4()); 69 assert_ok!(srv.bind(addr)); 70 71 assert!(srv.linger().unwrap().is_none()); 72 73 srv.set_linger(Some(Duration::new(0, 0))).unwrap(); 74 assert_eq!(srv.linger().unwrap(), Some(Duration::new(0, 0))); 75 } 76