gpt4 book ai didi

rust - 如何让 Rust Hyper 指定传出源端口?

转载 作者:行者123 更新时间:2023-12-03 11:35:24 50 4
gpt4 key购买 nike

有没有办法让 Hyper 指示网络接口(interface)为所有传出的 HTTP 请求分配特定的源端口?

最佳答案

您可以通过定义自定义 Connector 来告诉 hyper 如何打开连接。像这样:

use std::task::{self, Poll};
use hyper::{service::Service, Uri};
use tokio::net::TcpStream;
use futures::future::BoxFuture;

#[derive(Clone)]
struct MyConnector {
port: u32,
}

impl Service<Uri> for MyConnector {
type Response = TcpStream;
type Error = std::io::Error;
type Future = BoxFuture<'static, Result<TcpStream, Self::Error>>;

fn poll_ready(&mut self, _: &mut task::Context<'_>) -> Poll<Result<(), Self::Error>> {
Poll::Ready(Ok(()))
}

fn call(&mut self, uri: Uri) -> Self::Future {
Box::pin(async move {
// ... create your TcpStream here
})
}
}
这将允许您在 TcpStream 上设置您想要的任何选项。 .请看 my other answer这解释了如何调用 bind在自己的连接上,这是设置源端口所必需的。
现在您已经定义了连接器,您可以在创建新的 super Client 时使用它,以及在该 Client 上打开的任何连接将使用指定的连接器。
let client = hyper::Client::builder()
.build::<_, hyper::Body>(MyConnector { port: 1234 });

// now open your connection using `client`

关于rust - 如何让 Rust Hyper 指定传出源端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62838100/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com