Класс TcpListener
Класс TcpListener представляет собой TCP-сокет,
который привязывается к адресу и порту и ожидает
входящие соединения от клиентов. После привязки
слушатель может принимать соединения с помощью
метода accept или перебирать их через
итератор incoming. Каждое принятое
соединение представлено парой: поток TcpStream
и адрес клиента SocketAddr.
Синтаксис
use std::net::TcpListener;
let listener = TcpListener::bind(addr)?;
let (stream, addr) = listener.accept()?;
Пример
Давайте привяжем слушатель к локальному адресу
"127.0.0.1:8080" и выведем его локальный адрес:
use std::net::TcpListener;
fn main()
{
let listener = TcpListener::bind("127.0.0.1:8080").unwrap();
println!("{}", listener.local_addr().unwrap());
}
Результат выполнения кода:
127.0.0.1:8080
Пример
Давайте привяжем слушатель к порту 0,
чтобы операционная система сама выбрала свободный порт:
use std::net::TcpListener;
fn main()
{
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
let addr = listener.local_addr().unwrap();
println!("{}", addr.port() > 0);
}
Результат выполнения кода:
true
Пример
Давайте установим неблокирующий режим для слушателя и проверим, что он работает без блокировки:
use std::net::TcpListener;
fn main()
{
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
listener.set_nonblocking(true).unwrap();
let res = listener.accept();
println!("{}", res.is_err());
}
Результат выполнения кода:
true