Трейт ToSocketAddrs
Трейт ToSocketAddrs представляет собой абстракцию
для типов, которые могут быть преобразованы в один
или несколько socket-адресов. Он используется
функциями и методами из модуля std::net,
такими как TcpListener::bind,
TcpStream::connect и UdpSocket::bind,
позволяя передавать адреса в удобной форме.
Метод to_socket_addrs возвращает итератор
по значениям SocketAddr. Реализация трейта
существует для типов SocketAddr,
SocketAddrV4, SocketAddrV6,
str, String, а также кортежей
вида (&str, u16) и (String, u16).
Синтаксис
use std::net::ToSocketAddrs;
fn to_socket_addrs(&self) -> Result<impl Iterator<Item = SocketAddr>>
Пример
Давайте преобразуем строку "127.0.0.1:8080"
в socket-адрес:
use std::net::ToSocketAddrs;
fn main()
{
let addrs: Vec<_> = "127.0.0.1:8080".to_socket_addrs().unwrap().collect();
println!("{:?}", addrs);
}
Результат выполнения кода:
[127.0.0.1:8080]
Пример
Давайте преобразуем кортеж ("127.0.0.1", 8080)
в socket-адрес:
use std::net::ToSocketAddrs;
fn main()
{
let addrs: Vec<_> = ("127.0.0.1", 8080).to_socket_addrs().unwrap().collect();
println!("{:?}", addrs);
}
Результат выполнения кода:
[127.0.0.1:8080]
Пример
Давайте преобразуем строку "localhost:3000"
в список socket-адресов. Имя хоста может
разрешаться в несколько адресов:
use std::net::ToSocketAddrs;
fn main()
{
let addrs: Vec<_> = "localhost:3000".to_socket_addrs().unwrap().collect();
for addr in &addrs
{
println!("{}", addr);
}
}
Результат выполнения кода:
127.0.0.1:3000
[::1]:3000
Пример
Давайте проверим, что происходит при передаче некорректного адреса:
use std::net::ToSocketAddrs;
fn main()
{
let res = "invalid address".to_socket_addrs();
println!("{:?}", res.is_err());
}
Результат выполнения кода:
true
Смотрите также
-
структура
SocketAddr,
которая представляет socket-адрес -
структура
SocketAddrV4,
которая представляет IPv4 socket-адрес -
структура
SocketAddrV6,
которая представляет IPv6 socket-адрес -
функция
to_socket_addrs,
которая преобразует значение в итератор socket-адресов