Skip to content

Commit df0b7e2

Browse files
authored
Merge pull request #750 from sfackler/socket2-bump
upgrade socket2
2 parents e15c9b1 + 39736a6 commit df0b7e2

File tree

3 files changed

+16
-28
lines changed

3 files changed

+16
-28
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ jobs:
5959
- uses: actions/checkout@v2
6060
- uses: sfackler/actions/rustup@master
6161
with:
62-
version: 1.45.0
62+
version: 1.46.0
6363
- run: echo "::set-output name=version::$(rustc --version)"
6464
id: rust-version
6565
- uses: actions/cache@v1

tokio-postgres/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ pin-project-lite = "0.2"
4949
phf = "0.8"
5050
postgres-protocol = { version = "0.6.0", path = "../postgres-protocol" }
5151
postgres-types = { version = "0.2.0", path = "../postgres-types" }
52-
socket2 = "0.3"
52+
socket2 = "0.4"
5353
tokio = { version = "1.0", features = ["io-util"] }
5454
tokio-util = { version = "0.6", features = ["codec"] }
5555

tokio-postgres/src/connect_socket.rs

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
11
use crate::config::Host;
22
use crate::{Error, Socket};
3-
use socket2::{Domain, Protocol, Type};
3+
use socket2::{SockRef, TcpKeepalive};
44
use std::future::Future;
55
use std::io;
6-
use std::net::SocketAddr;
7-
#[cfg(unix)]
8-
use std::os::unix::io::{FromRawFd, IntoRawFd};
9-
#[cfg(windows)]
10-
use std::os::windows::io::{FromRawSocket, IntoRawSocket};
116
use std::time::Duration;
127
#[cfg(unix)]
138
use tokio::net::UnixStream;
14-
use tokio::net::{self, TcpSocket};
9+
use tokio::net::{self, TcpStream};
1510
use tokio::time;
1611

1712
pub(crate) async fn connect_socket(
@@ -30,30 +25,23 @@ pub(crate) async fn connect_socket(
3025
let mut last_err = None;
3126

3227
for addr in addrs {
33-
let domain = match addr {
34-
SocketAddr::V4(_) => Domain::ipv4(),
35-
SocketAddr::V6(_) => Domain::ipv6(),
36-
};
28+
let stream =
29+
match connect_with_timeout(TcpStream::connect(addr), connect_timeout).await {
30+
Ok(stream) => stream,
31+
Err(e) => {
32+
last_err = Some(e);
33+
continue;
34+
}
35+
};
3736

38-
let socket = socket2::Socket::new(domain, Type::stream(), Some(Protocol::tcp()))
39-
.map_err(Error::connect)?;
40-
socket.set_nonblocking(true).map_err(Error::connect)?;
41-
socket.set_nodelay(true).map_err(Error::connect)?;
37+
stream.set_nodelay(true).map_err(Error::connect)?;
4238
if keepalives {
43-
socket
44-
.set_keepalive(Some(keepalives_idle))
39+
SockRef::from(&stream)
40+
.set_tcp_keepalive(&TcpKeepalive::new().with_time(keepalives_idle))
4541
.map_err(Error::connect)?;
4642
}
4743

48-
#[cfg(unix)]
49-
let socket = unsafe { TcpSocket::from_raw_fd(socket.into_raw_fd()) };
50-
#[cfg(windows)]
51-
let socket = unsafe { TcpSocket::from_raw_socket(socket.into_raw_socket()) };
52-
53-
match connect_with_timeout(socket.connect(addr), connect_timeout).await {
54-
Ok(socket) => return Ok(Socket::new_tcp(socket)),
55-
Err(e) => last_err = Some(e),
56-
}
44+
return Ok(Socket::new_tcp(stream));
5745
}
5846

5947
Err(last_err.unwrap_or_else(|| {

0 commit comments

Comments
 (0)