in mini-sntp/src/lib.rs [65:111]
fn query_inner(socket: &UdpSocket, addr: impl ToSocketAddrs) -> Result<SntpTimeQueryResult, Error> {
let addr = addr
.to_socket_addrs()
.map_err(|err| Error::ResolveNtpPoolHostname(Some(err)))?
.next()
.ok_or(Error::ResolveNtpPoolHostname(None))?;
let request_transmit_timestamp = {
let (buf, request_transmit_timestamp) = create_client_request();
#[cfg(test)]
std::thread::sleep(std::time::Duration::from_secs(5)); // simulate network delay
let mut buf = &buf[..];
while !buf.is_empty() {
let sent = socket
.send_to(buf, addr)
.map_err(Error::SendClientRequest)?;
buf = &buf[sent..];
}
request_transmit_timestamp
};
let result = {
let mut buf = [0_u8; 48];
{
let mut buf = &mut buf[..];
while !buf.is_empty() {
let (received, received_from) = socket
.recv_from(buf)
.map_err(Error::ReceiveServerResponse)?;
if received_from == addr {
buf = &mut buf[received..];
}
}
}
#[cfg(test)]
std::thread::sleep(std::time::Duration::from_secs(5)); // simulate network delay
parse_server_response(buf, request_transmit_timestamp)?
};
Ok(result)
}