| 66 | } |
| 67 | |
| 68 | fn client(ready: Arc<(Mutex<u16>, Condvar)>) { |
| 69 | let port = { |
| 70 | let (lock, cvar) = &*ready; |
| 71 | let mut port = lock.lock().unwrap(); |
| 72 | while *port == 0 { |
| 73 | port = cvar.wait(port).unwrap(); |
| 74 | } |
| 75 | *port |
| 76 | }; |
| 77 | |
| 78 | let addr = SocketAddrV4::new(Ipv4Addr::LOCALHOST, port); |
| 79 | let mut buffer = vec![0; BUFFER_SIZE]; |
| 80 | |
| 81 | for _ in 0..16 { |
| 82 | let data_socket = socket(AddressFamily::INET, SocketType::STREAM, None).unwrap(); |
| 83 | connect(&data_socket, &addr).unwrap(); |
| 84 | |
| 85 | let nread = read(&data_socket, &mut buffer).unwrap(); |
| 86 | assert_eq!(String::from_utf8_lossy(&buffer[..nread]), "hello\n"); |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | #[test] |
| 91 | fn test_epoll() { |