in vsock_sample/rs/src/lib.rs [52:77]
fn vsock_connect(cid: u32, port: u32) -> Result<VsockSocket, String> {
let sockaddr = SockAddr::new_vsock(cid, port);
let mut err_msg = String::new();
for i in 0..MAX_CONNECTION_ATTEMPTS {
let vsocket = VsockSocket::new(
socket(
AddressFamily::Vsock,
SockType::Stream,
SockFlag::empty(),
None,
)
.map_err(|err| format!("Failed to create the socket: {:?}", err))?,
Shutdown::Write,
);
match connect(vsocket.as_raw_fd(), &sockaddr) {
Ok(_) => return Ok(vsocket),
Err(e) => err_msg = format!("Failed to connect: {}", e),
}
// Exponentially backoff before retrying to connect to the socket
std::thread::sleep(std::time::Duration::from_secs(1 << i));
}
Err(err_msg)
}