A search fans out to hundreds of peers, each holding a socket. A shell hands its children a soft limit of 256 open files on macOS, which one busy search blows straight through; a one-shot command never noticed because it exited before it mattered, but a resident daemon hits it and then cannot accept peers or control connections. From a client that looks like 'cannot reach the daemon: Connection closed', intermittently, for no visible reason. The daemon now raises its own soft limit to 8192 at startup, before anything opens a socket, and says so plainly when the hard limit will not allow it. macOS rejects an unlimited hard limit for open files, so both fields are named. Both accept loops also slept zero on failure. Out of descriptors does not clear by the next instruction, so one exhausted moment became a spinning core and thousands of identical log lines — which is what the report looked like. They now back off.
53 lines
1.5 KiB
TOML
53 lines
1.5 KiB
TOML
[package]
|
|
name = "soulseek-rs"
|
|
version.workspace = true
|
|
authors.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
homepage.workspace = true
|
|
description = "Command-line client for Soulseek protocol"
|
|
keywords = ["soulseek", "p2p", "client", "file-sharing"]
|
|
categories = ["command-line-utilities"]
|
|
|
|
[[bin]]
|
|
name = "soulseek-rs"
|
|
path = "src/main.rs"
|
|
|
|
# Small library target so integration tests can exercise the persistence
|
|
# pipeline; the dependency soulseek-rs-lib already owns the `soulseek_rs`
|
|
# crate name, hence the distinct one.
|
|
[lib]
|
|
name = "soulseek_rs_tui"
|
|
path = "src/lib.rs"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
soulseek-rs-lib = { version = "12.0.0", path = "../soulseek-rs-lib" }
|
|
|
|
clap = { version = "4.6.2", features = ["derive", "color", "wrap_help", "env"] }
|
|
clap_complete = "4.6.7"
|
|
ratatui = "0.30.2"
|
|
color-eyre = "0.6.5"
|
|
dotenv = "0.15.0"
|
|
igd-next = "0.17"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
toml = "0.9"
|
|
directories = "6"
|
|
# Linux uses the pure-Rust zbus Secret Service backend (async-secret-service
|
|
# + async-io + crypto-rust) instead of sync-secret-service, which links the
|
|
# system libdbus and breaks builds without libdbus-1-dev.
|
|
keyring = { version = "3", features = ["apple-native", "windows-native", "async-secret-service", "async-io", "crypto-rust"] }
|
|
chrono = { version = "0.4.45", default-features = false, features = ["clock", "serde"] }
|
|
getrandom = "0.4.3"
|
|
|
|
[dev-dependencies]
|
|
schemars = "1.2.1"
|
|
tempfile = "3"
|
|
|
|
[target."cfg(unix)".dependencies]
|
|
libc = "0.2.189"
|