Метод set_read_timeout
Метод set_read_timeout задаёт ограничение по времени
для операций чтения из TCP-соединения. Если данные не будут
получены в течение указанного времени, операция чтения
завершится ошибкой с типом WouldBlock или
TimedOut. Параметром метод принимает значение
типа Option<Duration>: если передать None,
то таймаут будет снят, а если Some(duration) -
установлено соответствующее ограничение. Метод возвращает
Result<(), Error>.
Синтаксис
TcpStream::set_read_timeout(&self, dur: Option<Duration>) -> Result<(), Error>
Пример
Давайте установим таймаут чтения в 5 секунд для соединения с сервером:
use std::net::TcpStream;
use std::time::Duration;
fn main()
{
let stream = TcpStream::connect("127.0.0.1:8080").unwrap();
stream.set_read_timeout(Some(Duration::from_secs(5))).unwrap();
println!("read timeout is set");
}
Результат выполнения кода:
"read timeout is set"
Пример
Давайте снимем таймаут чтения, передав None:
use std::net::TcpStream;
fn main()
{
let stream = TcpStream::connect("127.0.0.1:8080").unwrap();
stream.set_read_timeout(None).unwrap();
println!("read timeout is removed");
}
Результат выполнения кода:
"read timeout is removed"
Пример
Давайте установим таймаут чтения в 100 миллисекунд и попробуем прочитать данные из соединения:
use std::net::TcpStream;
use std::io::Read;
use std::time::Duration;
fn main()
{
let mut stream = TcpStream::connect("127.0.0.1:8080").unwrap();
stream.set_read_timeout(Some(Duration::from_millis(100))).unwrap();
let mut buf = [0u8; 128];
match stream.read(&mut buf) {
Ok(n) => println!("read {} bytes", n),
Err(e) => println!("error: {}", e),
}
}
Результат выполнения кода:
"error: Resource temporarily unavailable (os error 11)"
Смотрите также
-
метод
read_timeout,
который возвращает текущий таймаут чтения -
метод
set_write_timeout,
который устанавливает таймаут для операций записи -
метод
write_timeout,
который возвращает текущий таймаут записи -
метод
set_nonblocking,
который переключает соединение в неблокирующий режим