taler-rust

GNU Taler code in Rust. Largely core banking integrations.
Log | Files | Refs | Submodules | README | LICENSE

commit 1dac9a6c47ee1e023087cfb6bff2946011bd42d3
parent da9595df60f33c7ba76d1ad8f37f9505155093c0
Author: Antoine A <>
Date:   Thu,  3 Apr 2025 14:19:27 +0200

common: fix blocking socket

Diffstat:
MCargo.lock | 47++++++++++++++++++++++++-----------------------
Mcommon/taler-api/src/lib.rs | 4++++
Mcommon/taler-api/tests/common/mod.rs | 4++--
Mtaler-magnet-bank/tests/api.rs | 6+++++-
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},