fix: improve resource management and cleanup
This commit is contained in:
+1
-1
@@ -71,9 +71,9 @@ pub async fn check_all<R: reqwest::dns::Resolve + 'static>(
|
||||
});
|
||||
}
|
||||
|
||||
drop(queue);
|
||||
drop(config);
|
||||
drop(dns_resolver);
|
||||
drop(queue);
|
||||
drop(token);
|
||||
#[cfg(feature = "tui")]
|
||||
drop(tx);
|
||||
|
||||
+5
-4
@@ -52,10 +52,11 @@ impl reqwest::dns::Resolve for HickoryDnsResolver {
|
||||
fn resolve(&self, name: reqwest::dns::Name) -> reqwest::dns::Resolving {
|
||||
let resolver = Arc::clone(&self.0);
|
||||
Box::pin(async move {
|
||||
let lookup = resolver.lookup_ip(name.as_str()).await?;
|
||||
let lookup = resolver.lookup_ip(name.as_str()).await;
|
||||
drop(name);
|
||||
drop(resolver);
|
||||
let addrs: reqwest::dns::Addrs = Box::new(
|
||||
lookup.into_iter().map(|ip_addr| SocketAddr::new(ip_addr, 0)),
|
||||
lookup?.into_iter().map(|ip_addr| SocketAddr::new(ip_addr, 0)),
|
||||
);
|
||||
Ok(addrs)
|
||||
})
|
||||
@@ -170,8 +171,8 @@ pub fn create_reqwest_client<R: reqwest::dns::Resolve + 'static>(
|
||||
.connect_timeout(config.scraping.connect_timeout)
|
||||
.dns_resolver(dns_resolver);
|
||||
|
||||
if let Some(proxy) = &config.scraping.proxy {
|
||||
builder = builder.proxy(reqwest::Proxy::all(proxy.clone())?);
|
||||
if let Some(proxy) = config.scraping.proxy.clone() {
|
||||
builder = builder.proxy(reqwest::Proxy::all(proxy)?);
|
||||
}
|
||||
|
||||
let client = builder.build()?;
|
||||
|
||||
+1
-1
@@ -152,7 +152,7 @@ impl DbType {
|
||||
self.save_db(
|
||||
response,
|
||||
#[cfg(feature = "tui")]
|
||||
tx.clone(),
|
||||
tx,
|
||||
)
|
||||
.await?;
|
||||
|
||||
|
||||
@@ -196,6 +196,8 @@ pub async fn save_proxies(
|
||||
}
|
||||
}
|
||||
|
||||
drop(proxies);
|
||||
|
||||
let path = tokio::fs::canonicalize(&config.output.path)
|
||||
.await
|
||||
.unwrap_or_else(move |_| config.output.path.clone());
|
||||
|
||||
+6
-8
@@ -91,7 +91,7 @@ impl Proxy {
|
||||
config: &Config,
|
||||
dns_resolver: Arc<R>,
|
||||
) -> crate::Result<()> {
|
||||
if let Some(check_url) = &config.checking.check_url {
|
||||
if let Some(check_url) = config.checking.check_url.clone() {
|
||||
let builder = reqwest::ClientBuilder::new()
|
||||
.user_agent(&config.checking.user_agent)
|
||||
.proxy(self.try_into()?)
|
||||
@@ -110,14 +110,12 @@ impl Proxy {
|
||||
target_os = "linux"
|
||||
))]
|
||||
let builder = builder.tcp_user_timeout(None);
|
||||
let client = builder.build()?;
|
||||
let request = {
|
||||
let client = builder.build()?;
|
||||
client.get(check_url)
|
||||
};
|
||||
let start = Instant::now();
|
||||
let response = client
|
||||
.get(check_url.clone())
|
||||
.send()
|
||||
.await?
|
||||
.error_for_status()?;
|
||||
drop(client);
|
||||
let response = request.send().await?.error_for_status()?;
|
||||
self.timeout = Some(start.elapsed());
|
||||
self.exit_ip = response.text().await.map_or(None, |text| {
|
||||
if let Ok(httpbin) =
|
||||
|
||||
Reference in New Issue
Block a user