- let number: u64 = rng.gen();
- let mut buffer = number.to_le_bytes();
-
- let now = time::Instant::now();
- match socket.send(&buffer) {
- Ok(_size_sent) => {
- buffer.fill(0);
- match socket.recv(&mut buffer) {
- Ok(size_received) => {
- if size_received == 8 {
- let number_received = u64::from_le_bytes(buffer);
- if number_received != number {
+ loop {
+ let number: u64 = rng.gen();
+ let mut buffer = number.to_le_bytes();
+ let now = time::Instant::now();
+ match socket.send(&buffer) {
+ Ok(_size_sent) => {
+ buffer.fill(0);
+ match socket.recv(&mut buffer) {
+ Ok(size_received) => {
+ if size_received == 8 {
+ let number_received = u64::from_le_bytes(buffer);
+ if number_received == number {
+ return Ok(time::Instant::now() - now);
+ } else {
+ return Err(PingError::WrongMessageReceived(format!(
+ "Message number receceived ({}) is not equal to the one sent ({})",
+ number_received, number
+ )));
+ }
+ } else {