main.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //! Sets up a listening socket on host.
  2. use std::{
  3. io::{Read, Write},
  4. time::Duration,
  5. };
  6. use vsock::{VsockAddr, VsockListener, VMADDR_CID_HOST};
  7. const PORT: u32 = 1221;
  8. fn main() {
  9. println!("[Host] Setting up listening socket on port {PORT}");
  10. let listener = VsockListener::bind(&VsockAddr::new(VMADDR_CID_HOST, PORT))
  11. .expect("Failed to set up listening port");
  12. let Some(Ok(mut vsock_stream)) = listener.incoming().next() else {
  13. println!("[Host] Failed to get vsock_stream");
  14. return;
  15. };
  16. println!(
  17. "[Host] Accept connection: {:?}, peer addr: {:?}, local addr: {:?}",
  18. vsock_stream,
  19. vsock_stream.peer_addr(),
  20. vsock_stream.local_addr()
  21. );
  22. const EXCHANGE_NUM: usize = 2;
  23. for k in 0..EXCHANGE_NUM {
  24. let message = &format!("{k}-Hello from host");
  25. vsock_stream
  26. .write_all(message.as_bytes())
  27. .expect("write_all");
  28. println!("[Host] Sent message: {:?}.", message);
  29. vsock_stream.flush().expect("flush");
  30. println!("[Host] Flushed.");
  31. let mut message = vec![0u8; 30];
  32. vsock_stream
  33. .set_read_timeout(Some(Duration::from_millis(3_000)))
  34. .expect("set_read_timeout");
  35. for i in 0..10 {
  36. match vsock_stream.read(&mut message) {
  37. Ok(len) => {
  38. println!(
  39. "[Host] Received message: {:?}({:?}), len: {:?}",
  40. message,
  41. std::str::from_utf8(&message[..len]),
  42. len,
  43. );
  44. break;
  45. }
  46. Err(e) => {
  47. println!("{i} {e:?}");
  48. std::thread::sleep(Duration::from_millis(200))
  49. }
  50. }
  51. }
  52. }
  53. println!("[Host] End.");
  54. }