From bd024e3bcfa4e30b7555e98f84e087949447d73c Mon Sep 17 00:00:00 2001 From: anitarua Date: Fri, 26 Sep 2025 14:46:18 -0700 Subject: [PATCH 1/2] fix: socket was not connecting + enable reuse port/address --- protosocket-rpc/src/client/configuration.rs | 22 +++++++-------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/protosocket-rpc/src/client/configuration.rs b/protosocket-rpc/src/client/configuration.rs index bb4763a..adf0c6f 100644 --- a/protosocket-rpc/src/client/configuration.rs +++ b/protosocket-rpc/src/client/configuration.rs @@ -1,5 +1,5 @@ use protosocket::Connection; -use socket2::TcpKeepalive; +use socket2::{SockRef, TcpKeepalive}; use std::{future::Future, net::SocketAddr, sync::Arc}; use tokio::{net::TcpStream, sync::mpsc}; use tokio_rustls::rustls::pki_types::ServerName; @@ -242,25 +242,17 @@ where { log::trace!("new client {address}, {configuration:?}"); - let socket = socket2::Socket::new( - match address { - SocketAddr::V4(_) => socket2::Domain::IPV4, - SocketAddr::V6(_) => socket2::Domain::IPV6, - }, - socket2::Type::STREAM, - None, - )?; + let stream = TcpStream::connect(&address).await?; + let sf = SockRef::from(&stream); let mut tcp_keepalive = TcpKeepalive::new(); if let Some(duration) = configuration.tcp_keepalive_duration { tcp_keepalive = tcp_keepalive.with_time(duration); } - - socket.set_nonblocking(true)?; - socket.set_tcp_nodelay(true)?; - socket.set_tcp_keepalive(&tcp_keepalive)?; - - let stream = TcpStream::from_std(socket.into())?; + sf.set_tcp_keepalive(&tcp_keepalive)?; + sf.set_tcp_nodelay(true)?; + sf.set_reuse_address(true)?; + sf.set_reuse_port(true)?; let message_reactor: RpcCompletionReactor< Deserializer::Message, From 3d958b69b763bec9230c9beb8ec05ac5ff08ebc6 Mon Sep 17 00:00:00 2001 From: anitarua Date: Fri, 26 Sep 2025 17:03:56 -0700 Subject: [PATCH 2/2] set nonblocking, do not set reuse port --- protosocket-rpc/src/client/configuration.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/protosocket-rpc/src/client/configuration.rs b/protosocket-rpc/src/client/configuration.rs index adf0c6f..30f99b3 100644 --- a/protosocket-rpc/src/client/configuration.rs +++ b/protosocket-rpc/src/client/configuration.rs @@ -1,5 +1,5 @@ use protosocket::Connection; -use socket2::{SockRef, TcpKeepalive}; +use socket2::TcpKeepalive; use std::{future::Future, net::SocketAddr, sync::Arc}; use tokio::{net::TcpStream, sync::mpsc}; use tokio_rustls::rustls::pki_types::ServerName; @@ -243,16 +243,18 @@ where log::trace!("new client {address}, {configuration:?}"); let stream = TcpStream::connect(&address).await?; - let sf = SockRef::from(&stream); + + // For setting socket configuration options available to socket2 + let socket = socket2::SockRef::from(&stream); let mut tcp_keepalive = TcpKeepalive::new(); if let Some(duration) = configuration.tcp_keepalive_duration { tcp_keepalive = tcp_keepalive.with_time(duration); } - sf.set_tcp_keepalive(&tcp_keepalive)?; - sf.set_tcp_nodelay(true)?; - sf.set_reuse_address(true)?; - sf.set_reuse_port(true)?; + socket.set_nonblocking(true)?; + socket.set_tcp_keepalive(&tcp_keepalive)?; + socket.set_tcp_nodelay(true)?; + socket.set_reuse_address(true)?; let message_reactor: RpcCompletionReactor< Deserializer::Message,