1 | #![warn (rust_2018_idioms)] |
2 | #![cfg (all(feature = "full" , not(target_os = "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 ] |
9 | async 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 | async 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 ] |
45 | async 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 ] |
64 | async 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 | |