Вариант Both класса Shutdown
Вариант Both класса Shutdown используется
в методе shutdown для указания того, что нужно
закрыть одновременно и чтение, и запись сетевого
соединения. Он объединяет в себе поведение вариантов
Read и Write. Параметров вариант не принимает.
Синтаксис
Shutdown::Both
Пример
Давайте создадим TCP-соединение и закроем его
с помощью варианта Both:
use std::net::{TcpListener, TcpStream, Shutdown};
use std::thread;
fn main()
{
let listener = TcpListener::bind("127.0.0.1:8080").unwrap();
let handle = thread::spawn(move || {
let mut stream = TcpStream::connect("127.0.0.1:8080").unwrap();
stream.shutdown(Shutdown::Both).unwrap();
});
let (mut stream, _) = listener.accept().unwrap();
stream.shutdown(Shutdown::Both).unwrap();
handle.join().unwrap();
println!("connection closed");
}
Результат выполнения кода:
"connection closed"
Пример
Давайте сравним вариант Both с вариантами
Read и Write, закрывая соединение
в разных режимах:
use std::net::{TcpListener, TcpStream, Shutdown};
use std::thread;
fn main()
{
let listener = TcpListener::bind("127.0.0.1:8081").unwrap();
let handle = thread::spawn(move || {
let mut stream = TcpStream::connect("127.0.0.1:8081").unwrap();
stream.shutdown(Shutdown::Read).unwrap();
println!("read side closed");
});
let (mut stream, _) = listener.accept().unwrap();
stream.shutdown(Shutdown::Both).unwrap();
println!("both sides closed");
handle.join().unwrap();
}
Результат выполнения кода:
"both sides closed"
"read side closed"
Смотрите также
-
класс
Shutdown,
который управляет закрытием сетевого соединения -
вариант
Read,
который закрывает только чтение соединения -
вариант
Write,
который закрывает только запись соединения -
типаж
ToSocketAddrs,
который преобразует значения в адреса сокетов