我有许多相同的程序,他们在不同的端口运行.手动配置它们是困难的,所以我想从操作系统申请一些可用的端口。但我找不到一种方法来实现这个操作,因为我是新的生 rust 。(额外的条件是,我有一个外部程序必须知道他们的所有端口,所以指定端口为零将无法实现这一点)
imzjd6km1#
我知道了。将端口指定为零,让操作系统为我分配一个可用端口,并通过Actix中的SocketAddr暴露它。(原始TCP与SocketAddrV4的方式类似)
SocketAddr
SocketAddrV4
#[actix_web::main] async fn main() -> std::io::Result<()> { set_var("PWNXY_CLIENT_PORT", "8080").unwrap(); let srv = HttpServer::new(|| { App::new() .service(hello) .service(echo) .route("/hey", web::get().to(manual_hello)) }) .bind(("127.0.0.1", 0))?; println!("{:#?}", srv.addrs()[0].port()); srv.run().await }
fcg9iug32#
来自bind的文档:端口号为0的绑定将请求操作系统为该监听程序分配端口。分配的端口可以通过TcpListener::local_addr方法查询。
bind
2条答案
按热度按时间imzjd6km1#
我知道了。
将端口指定为零,让操作系统为我分配一个可用端口,并通过Actix中的
SocketAddr
暴露它。(原始TCP与SocketAddrV4
的方式类似)fcg9iug32#
来自
bind
的文档:端口号为0的绑定将请求操作系统为该监听程序分配端口。分配的端口可以通过TcpListener::local_addr方法查询。