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