From 49db9cd33c3e8deea195d43c2c0296baa48601bb Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Thu, 18 Mar 2021 20:39:43 -0400 Subject: [PATCH 1/2] upgrade socket2 --- tokio-postgres/Cargo.toml | 2 +- tokio-postgres/src/connect_socket.rs | 40 ++++++++++------------------ 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/tokio-postgres/Cargo.toml b/tokio-postgres/Cargo.toml index 254ebe62..c03f8708 100644 --- a/tokio-postgres/Cargo.toml +++ b/tokio-postgres/Cargo.toml @@ -49,7 +49,7 @@ pin-project-lite = "0.2" phf = "0.8" postgres-protocol = { version = "0.6.0", path = "../postgres-protocol" } postgres-types = { version = "0.2.0", path = "../postgres-types" } -socket2 = "0.3" +socket2 = "0.4" tokio = { version = "1.0", features = ["io-util"] } tokio-util = { version = "0.6", features = ["codec"] } diff --git a/tokio-postgres/src/connect_socket.rs b/tokio-postgres/src/connect_socket.rs index 564677b0..47467690 100644 --- a/tokio-postgres/src/connect_socket.rs +++ b/tokio-postgres/src/connect_socket.rs @@ -1,17 +1,12 @@ use crate::config::Host; use crate::{Error, Socket}; -use socket2::{Domain, Protocol, Type}; +use socket2::{SockRef, TcpKeepalive}; use std::future::Future; use std::io; -use std::net::SocketAddr; -#[cfg(unix)] -use std::os::unix::io::{FromRawFd, IntoRawFd}; -#[cfg(windows)] -use std::os::windows::io::{FromRawSocket, IntoRawSocket}; use std::time::Duration; #[cfg(unix)] use tokio::net::UnixStream; -use tokio::net::{self, TcpSocket}; +use tokio::net::{self, TcpStream}; use tokio::time; pub(crate) async fn connect_socket( @@ -30,30 +25,23 @@ pub(crate) async fn connect_socket( let mut last_err = None; for addr in addrs { - let domain = match addr { - SocketAddr::V4(_) => Domain::ipv4(), - SocketAddr::V6(_) => Domain::ipv6(), - }; + let stream = + match connect_with_timeout(TcpStream::connect(addr), connect_timeout).await { + Ok(stream) => stream, + Err(e) => { + last_err = Some(e); + continue; + } + }; - let socket = socket2::Socket::new(domain, Type::stream(), Some(Protocol::tcp())) - .map_err(Error::connect)?; - socket.set_nonblocking(true).map_err(Error::connect)?; - socket.set_nodelay(true).map_err(Error::connect)?; + stream.set_nodelay(true).map_err(Error::connect)?; if keepalives { - socket - .set_keepalive(Some(keepalives_idle)) + SockRef::from(&stream) + .set_tcp_keepalive(&TcpKeepalive::new().with_time(keepalives_idle)) .map_err(Error::connect)?; } - #[cfg(unix)] - let socket = unsafe { TcpSocket::from_raw_fd(socket.into_raw_fd()) }; - #[cfg(windows)] - let socket = unsafe { TcpSocket::from_raw_socket(socket.into_raw_socket()) }; - - match connect_with_timeout(socket.connect(addr), connect_timeout).await { - Ok(socket) => return Ok(Socket::new_tcp(socket)), - Err(e) => last_err = Some(e), - } + return Ok(Socket::new_tcp(stream)); } Err(last_err.unwrap_or_else(|| { From 39736a6244244bd74456eb94dc0e87a38e542331 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Thu, 18 Mar 2021 20:43:58 -0400 Subject: [PATCH 2/2] bump ci version to 1.46 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7191eb9e..4a95dbe0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -59,7 +59,7 @@ jobs: - uses: actions/checkout@v2 - uses: sfackler/actions/rustup@master with: - version: 1.45.0 + version: 1.46.0 - run: echo "::set-output name=version::$(rustc --version)" id: rust-version - uses: actions/cache@v1