如何请求一个可用的端口到操作系统在 rust ?

sdnqo3pr  于 2023-01-30  发布在  其他
关注(0)|答案(2)|浏览(147)

我有许多相同的程序,他们在不同的端口运行.
手动配置它们是困难的,所以我想从操作系统申请一些可用的端口。
但我找不到一种方法来实现这个操作,因为我是新的生 rust 。
(额外的条件是,我有一个外部程序必须知道他们的所有端口,所以指定端口为零将无法实现这一点)

imzjd6km

imzjd6km1#

我知道了。
将端口指定为零,让操作系统为我分配一个可用端口,并通过Actix中的SocketAddr暴露它。(原始TCP与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
}
fcg9iug3

fcg9iug32#

来自bind的文档:
端口号为0的绑定将请求操作系统为该监听程序分配端口。分配的端口可以通过TcpListener::local_addr方法查询。

相关问题