diff --git a/Cargo.lock b/Cargo.lock index ffcbe0c..9a96774 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1282,6 +1282,7 @@ dependencies = [ "rand", "regex", "reqwest", + "rlimit", "serde", "serde_json", "serde_urlencoded", @@ -2013,6 +2014,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "rlimit" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3560f70f30a0f16d11d01ed078a07740fe6b489667abc7c7b029155d9f21c3d8" +dependencies = [ + "libc", +] + [[package]] name = "rqbit" version = "5.3.0" diff --git a/crates/librqbit/Cargo.toml b/crates/librqbit/Cargo.toml index 18092d9..34fb612 100644 --- a/crates/librqbit/Cargo.toml +++ b/crates/librqbit/Cargo.toml @@ -67,6 +67,7 @@ base64 = "0.21.5" serde_with = "3.4.0" tokio-util = "0.7.10" bytes = "1.5.0" +rlimit = "0.10.1" [dev-dependencies] futures = {version = "0.3"} diff --git a/crates/librqbit/src/lib.rs b/crates/librqbit/src/lib.rs index aee40f2..434bf27 100644 --- a/crates/librqbit/src/lib.rs +++ b/crates/librqbit/src/lib.rs @@ -59,3 +59,7 @@ pub use librqbit_core::torrent_metainfo::*; pub fn version() -> &'static str { env!("CARGO_PKG_VERSION") } + +pub fn try_increase_nofile_limit() -> anyhow::Result { + Ok(rlimit::increase_nofile_limit(1024 * 1024)?) +} diff --git a/crates/rqbit/src/main.rs b/crates/rqbit/src/main.rs index 1179b07..4fdfb1d 100644 --- a/crates/rqbit/src/main.rs +++ b/crates/rqbit/src/main.rs @@ -246,6 +246,11 @@ async fn async_main(opts: Opts) -> anyhow::Result<()> { log_file_rust_log: Some(&opts.log_file_rust_log), })?; + match librqbit::try_increase_nofile_limit() { + Ok(limit) => info!(limit = limit, "inreased open file limit"), + Err(e) => warn!("failed increasing open file limit: {:#}", e), + }; + let mut sopts = SessionOptions { disable_dht: opts.disable_dht, disable_dht_persistence: opts.disable_dht_persistence, diff --git a/desktop/src-tauri/src/main.rs b/desktop/src-tauri/src/main.rs index 2c7935a..fc135bb 100644 --- a/desktop/src-tauri/src/main.rs +++ b/desktop/src-tauri/src/main.rs @@ -24,7 +24,7 @@ use librqbit::{ }; use parking_lot::RwLock; use serde::Serialize; -use tracing::{error, error_span}; +use tracing::{error, error_span, info, warn}; const ERR_NOT_CONFIGURED: ApiError = ApiError::new_from_text(StatusCode::FAILED_DEPENDENCY, "not configured"); @@ -307,6 +307,11 @@ async fn start() { }) .unwrap(); + match librqbit::try_increase_nofile_limit() { + Ok(limit) => info!(limit = limit, "inreased open file limit"), + Err(e) => warn!("failed increasing open file limit: {:#}", e), + }; + let state = State::new(init_logging_result).await; tauri::Builder::default()