1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- //! Sets up a listening socket on host.
- use std::{
- io::{Read, Write},
- time::Duration,
- };
- use vsock::{VsockAddr, VsockListener, VMADDR_CID_HOST};
- const PORT: u32 = 1221;
- fn main() {
- println!("[Host] Setting up listening socket on port {PORT}");
- let listener = VsockListener::bind(&VsockAddr::new(VMADDR_CID_HOST, PORT))
- .expect("Failed to set up listening port");
- let Some(Ok(mut vsock_stream)) = listener.incoming().next() else {
- println!("[Host] Failed to get vsock_stream");
- return;
- };
- println!(
- "[Host] Accept connection: {:?}, peer addr: {:?}, local addr: {:?}",
- vsock_stream,
- vsock_stream.peer_addr(),
- vsock_stream.local_addr()
- );
- const EXCHANGE_NUM: usize = 2;
- for k in 0..EXCHANGE_NUM {
- let message = &format!("{k}-Hello from host");
- vsock_stream
- .write_all(message.as_bytes())
- .expect("write_all");
- println!("[Host] Sent message: {:?}.", message);
- vsock_stream.flush().expect("flush");
- println!("[Host] Flushed.");
- let mut message = vec![0u8; 30];
- vsock_stream
- .set_read_timeout(Some(Duration::from_millis(3_000)))
- .expect("set_read_timeout");
- for i in 0..10 {
- match vsock_stream.read(&mut message) {
- Ok(len) => {
- println!(
- "[Host] Received message: {:?}({:?}), len: {:?}",
- message,
- std::str::from_utf8(&message[..len]),
- len,
- );
- break;
- }
- Err(e) => {
- println!("{i} {e:?}");
- std::thread::sleep(Duration::from_millis(200))
- }
- }
- }
- }
- println!("[Host] End.");
- }
|