РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1154 of 1245 menu

Вариант Write класса Shutdown

Вариант Write перечисления Shutdown указывает, что при вызове метода shutdown у сетевого потока будет закрыта только возможность записи данных. Чтение из соединения при этом остаётся доступным. Этот вариант полезен, когда нужно сообщить удалённой стороне о завершении отправки данных, но при этом продолжить получать ответ.

Синтаксис

Shutdown::Write

Пример

Давайте создадим TCP-соединение и закроем только запись, оставив чтение открытым:

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, _) = listener.accept().unwrap(); stream.shutdown(Shutdown::Write).unwrap(); println!("Write side closed"); }); let mut stream = TcpStream::connect("127.0.0.1:8080").unwrap(); stream.shutdown(Shutdown::Write).unwrap(); println!("Client write side closed"); handle.join().unwrap(); }

Результат выполнения кода:

Client write side closed Write side closed

Пример

Давайте проверим, что после вызова Shutdown::Write чтение всё ещё доступно:

use std::net::{TcpListener, TcpStream, Shutdown}; use std::io::{Read, Write}; use std::thread; fn main() { let listener = TcpListener::bind("127.0.0.1:8081").unwrap(); let handle = thread::spawn(move || { let (mut stream, _) = listener.accept().unwrap(); stream.write_all(b"abcde").unwrap(); stream.shutdown(Shutdown::Write).unwrap(); }); let mut stream = TcpStream::connect("127.0.0.1:8081").unwrap(); stream.shutdown(Shutdown::Write).unwrap(); let mut buf = String::new(); stream.read_to_string(&mut buf).unwrap(); println!("{}", buf); handle.join().unwrap(); }

Результат выполнения кода:

"abcde"

Смотрите также

  • перечисление Shutdown,
    которое определяет способы закрытия сетевого соединения
  • вариант Read,
    который закрывает только чтение из соединения
  • вариант Both,
    который закрывает и чтение, и запись
  • тип ToSocketAddrs,
    который используется для преобразования адресов в сокеты
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить