commit 1dac9a6c47ee1e023087cfb6bff2946011bd42d3
parent da9595df60f33c7ba76d1ad8f37f9505155093c0
Author: Antoine A <>
Date: Thu, 3 Apr 2025 14:19:27 +0200
common: fix blocking socket
Diffstat:
4 files changed, 35 insertions(+), 26 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -111,9 +111,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
[[package]]
name = "axum"
-version = "0.8.1"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d6fd624c75e18b3b4c6b9caf42b1afe24437daaee904069137d8bab077be8b8"
+checksum = "de45108900e1f9b9242f7f2e254aa3e2c029c921c258fe9e6b4217eeebd54288"
dependencies = [
"axum-core",
"bytes",
@@ -145,12 +145,12 @@ dependencies = [
[[package]]
name = "axum-core"
-version = "0.5.0"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733"
+checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6"
dependencies = [
"bytes",
- "futures-util",
+ "futures-core",
"http",
"http-body",
"http-body-util",
@@ -285,9 +285,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.5.34"
+version = "4.5.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e958897981290da2a852763fe9cdb89cd36977a5d729023127095fa94d95e2ff"
+checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944"
dependencies = [
"clap_builder",
"clap_derive",
@@ -295,9 +295,9 @@ dependencies = [
[[package]]
name = "clap_builder"
-version = "4.5.34"
+version = "4.5.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83b0f35019843db2160b5bb19ae09b4e6411ac33fc6a712003c33e03090e2489"
+checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9"
dependencies = [
"anstream",
"anstyle",
@@ -473,9 +473,9 @@ dependencies = [
[[package]]
name = "darling"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
+checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
dependencies = [
"darling_core",
"darling_macro",
@@ -483,9 +483,9 @@ dependencies = [
[[package]]
name = "darling_core"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
+checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
dependencies = [
"fnv",
"ident_case",
@@ -497,9 +497,9 @@ dependencies = [
[[package]]
name = "darling_macro"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
+checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
@@ -994,9 +994,9 @@ dependencies = [
[[package]]
name = "hyper-util"
-version = "0.1.10"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"
+checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2"
dependencies = [
"bytes",
"futures-channel",
@@ -1004,6 +1004,7 @@ dependencies = [
"http",
"http-body",
"hyper",
+ "libc",
"pin-project-lite",
"socket2",
"tokio",
@@ -1386,9 +1387,9 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.21.2"
+version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2806eaa3524762875e21c3dcd057bc4b7bfa01ce4da8d46be1cd43649e1cc6b"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "oorandom"
@@ -1788,9 +1789,9 @@ dependencies = [
[[package]]
name = "rustix"
-version = "1.0.3"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96"
+checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
dependencies = [
"bitflags",
"errno",
@@ -2042,9 +2043,9 @@ dependencies = [
[[package]]
name = "socket2"
-version = "0.5.8"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
+checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
dependencies = [
"libc",
"windows-sys 0.52.0",
diff --git a/common/taler-api/src/lib.rs b/common/taler-api/src/lib.rs
@@ -47,18 +47,21 @@ impl Serve {
"Server listening on activated unix socket {:?}",
unix.local_addr()
);
+ unix.set_nonblocking(true)?;
Ok(Listener::Unix(UnixListener::from_std(unix)?))
} else if let Ok(Some(tcp)) = listenfd.take_tcp_listener(0) {
info!(target: "api",
"Server listening on activated TCP socket {:?}",
tcp.local_addr()
);
+ tcp.set_nonblocking(true)?;
Ok(Listener::Tcp(TcpListener::from_std(tcp)?))
} else {
match self {
Serve::Tcp(socket_addr) => {
info!(target: "api", "Server listening on {socket_addr}");
let listener = std::net::TcpListener::bind(socket_addr)?;
+ listener.set_nonblocking(true)?;
Ok(Listener::Tcp(TcpListener::from_std(listener)?))
}
Serve::Unix { path, permission } => {
@@ -74,6 +77,7 @@ impl Serve {
}
let listener = std::os::unix::net::UnixListener::bind(path)?;
std::fs::set_permissions(path, permission.clone())?;
+ listener.set_nonblocking(true)?;
Ok(Listener::Unix(UnixListener::from_std(listener)?))
}
}
diff --git a/common/taler-api/tests/common/mod.rs b/common/taler-api/tests/common/mod.rs
@@ -20,10 +20,10 @@ use axum::Router;
use db::notification_listener;
use sqlx::PgPool;
use taler_api::{
- api::{revenue::Revenue, wire::WireGateway, TalerApi, TalerApiBuilder, TalerRouter as _},
+ api::{TalerApi, TalerApiBuilder, TalerRouter as _, revenue::Revenue, wire::WireGateway},
auth::AuthMethod,
db::IncomingType,
- error::{failure, ApiResult},
+ error::{ApiResult, failure},
};
use taler_common::{
api_params::{History, Page},
diff --git a/taler-magnet-bank/tests/api.rs b/taler-magnet-bank/tests/api.rs
@@ -17,7 +17,11 @@
use std::sync::Arc;
use sqlx::PgPool;
-use taler_api::{api::{TalerApiBuilder, TalerRouter as _}, auth::AuthMethod, subject::OutgoingSubject};
+use taler_api::{
+ api::{TalerApiBuilder, TalerRouter as _},
+ auth::AuthMethod,
+ subject::OutgoingSubject,
+};
use taler_common::{
api_common::ShortHashCode,
api_wire::{OutgoingHistory, TransferState},