Replace net2 with socket2

The Rust ecosystem being the Rust ecosystem, essential crates always get
abandoned after a couple months, and apps need to be rewritten for the
replacement du jour.
pull/38/head
Frank Denis 4 years ago
parent 6550eac367
commit eaba8d3db5

@ -16,10 +16,10 @@ anyhow = "1.0"
byteorder = "1.3"
clap = { version="2.33", default-features = false, features=["wrap_help", "nightly"] }
clockpro-cache = "0.1.8"
coarsetime = "0.1.12"
coarsetime = "0.1.13"
daemonize-simple = "0.1.4"
derivative = "1.0.3"
dnsstamps = "0.1.3"
derivative = "2.1.1"
dnsstamps = "0.1.4"
env_logger = { version = "0.7.1", default-features = false, features = ["humantime"] }
futures = { version = "0.3", features = ["async-await"] }
hyper = { version = "0.13", default_features = false, optional = true }
@ -27,21 +27,21 @@ ipext = "0.1"
jemallocator = "0.3"
libsodium-sys-stable="1.19"
log = { version = "0.4.8", features = ["std", "release_max_level_debug"] }
net2 = "0.2.33"
socket2 = "0.3"
parking_lot = "0.10"
privdrop = "0.3.4"
rand = "0.7"
rustc-hash = "1"
serde = "1.0"
serde_derive = "1.0"
serde-big-array = "0.2"
serde-big-array = "0.3.0"
siphasher = "0.3"
tokio = { version = "0.2.11", features = ["fs", "rt-threaded", "time", "tcp", "udp", "stream", "parking_lot"] }
toml = "0.5"
[dependencies.prometheus]
optional = true
version = "0.7"
version = "0.9.0"
default_features = false
features = ["process"]

@ -241,11 +241,37 @@ async fn tls_proxy(
Some(tls_upstream_addr) => tls_upstream_addr,
};
let std_socket = match globals.external_addr {
Some(x @ SocketAddr::V4(_)) => net2::TcpBuilder::new_v4()?.bind(&x)?.to_tcp_stream()?,
Some(x @ SocketAddr::V6(_)) => net2::TcpBuilder::new_v6()?.bind(&x)?.to_tcp_stream()?,
Some(x @ SocketAddr::V4(_)) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv4(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?;
kindy.bind(&x.into())?;
kindy.into_tcp_stream()
}
Some(x @ SocketAddr::V6(_)) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv6(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?;
kindy.bind(&x.into())?;
kindy.into_tcp_stream()
}
None => match tls_upstream_addr {
SocketAddr::V4(_) => net2::TcpBuilder::new_v4()?.to_tcp_stream()?,
SocketAddr::V6(_) => net2::TcpBuilder::new_v6()?.to_tcp_stream()?,
SocketAddr::V4(_) => socket2::Socket::new(
socket2::Domain::ipv4(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?
.into_tcp_stream(),
SocketAddr::V6(_) => socket2::Socket::new(
socket2::Domain::ipv6(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?
.into_tcp_stream(),
},
};
let mut ext_socket = TcpStream::connect_std(std_socket, tls_upstream_addr).await?;
@ -397,28 +423,52 @@ fn bind_listeners(
let mut sockets = Vec::with_capacity(listen_addrs.len());
for listen_addr in listen_addrs {
let tcp_listener = match listen_addr {
SocketAddr::V4(_) => net2::TcpBuilder::new_v4()?
.reuse_address(true)?
.bind(&listen_addr)?
.listen(1024)?,
SocketAddr::V6(_) => net2::TcpBuilder::new_v6()?
.reuse_address(true)?
.only_v6(true)?
.bind(&listen_addr)?
.listen(1024)?,
};
let std_socket = match listen_addr {
SocketAddr::V4(_) => net2::UdpBuilder::new_v4()?
.reuse_address(true)?
.bind(&listen_addr),
SocketAddr::V6(_) => net2::UdpBuilder::new_v6()?
.reuse_address(true)?
.only_v6(true)?
.bind(&listen_addr),
SocketAddr::V4(_) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv4(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?;
kindy.set_reuse_address(true)?;
kindy.bind(&(*listen_addr).into())?;
kindy.listen(1024)?;
kindy.into_tcp_listener()
}
SocketAddr::V6(_) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv6(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?;
kindy.set_reuse_address(true)?;
kindy.set_only_v6(true)?;
kindy.bind(&(*listen_addr).into())?;
kindy.listen(1024)?;
kindy.into_tcp_listener()
}
};
let udp_socket = match std_socket {
Ok(udp_socket) => udp_socket,
Err(e) => bail!("{}/UDP: {}", listen_addr, e),
let udp_socket = match listen_addr {
SocketAddr::V4(_) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv4(),
socket2::Type::dgram(),
Some(socket2::Protocol::udp()),
)?;
kindy.set_reuse_address(true)?;
kindy.bind(&(*listen_addr).into())?;
kindy.into_udp_socket()
}
SocketAddr::V6(_) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv6(),
socket2::Type::dgram(),
Some(socket2::Protocol::udp()),
)?;
kindy.set_reuse_address(true)?;
kindy.set_only_v6(true)?;
kindy.bind(&(*listen_addr).into())?;
kindy.into_udp_socket()
}
};
sockets.push((tcp_listener, udp_socket))
}

@ -53,15 +53,29 @@ pub async fn prometheus_service(
) -> Result<(), Error> {
let path = Arc::new(metrics_config.path);
let std_socket = match metrics_config.listen_addr {
SocketAddr::V4(_) => net2::TcpBuilder::new_v4()?
.reuse_address(true)?
.bind(&metrics_config.listen_addr)?
.listen(1024)?,
SocketAddr::V6(_) => net2::TcpBuilder::new_v6()?
.reuse_address(true)?
.only_v6(true)?
.bind(&metrics_config.listen_addr)?
.listen(1024)?,
SocketAddr::V4(_) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv4(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?;
kindy.set_reuse_address(true)?;
kindy.bind(&metrics_config.listen_addr.into())?;
kindy.listen(1024)?;
kindy.into_tcp_listener()
}
SocketAddr::V6(_) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv6(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?;
kindy.set_reuse_address(true)?;
kindy.set_only_v6(true)?;
kindy.bind(&metrics_config.listen_addr.into())?;
kindy.listen(1024)?;
kindy.into_tcp_listener()
}
};
let mut stream = TcpListener::from_std(std_socket)?;
let concurrent_connections = Arc::new(AtomicU32::new(0));

@ -7,7 +7,7 @@ use byteorder::{BigEndian, ByteOrder};
use rand::prelude::*;
use siphasher::sip128::Hasher128;
use std::hash::Hasher;
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
use std::net::{Ipv6Addr, SocketAddr, SocketAddrV6};
use tokio::net::{TcpStream, UdpSocket};
use tokio::prelude::*;
@ -19,14 +19,50 @@ pub async fn resolve_udp(
has_cached_response: bool,
) -> Result<Vec<u8>, Error> {
let std_socket = match globals.external_addr {
Some(x @ SocketAddr::V4(_)) => net2::UdpBuilder::new_v4()?.bind(&x)?,
Some(x @ SocketAddr::V6(_)) => net2::UdpBuilder::new_v6()?.bind(&x)?,
Some(x @ SocketAddr::V4(_)) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv4(),
socket2::Type::dgram(),
Some(socket2::Protocol::udp()),
)?;
kindy.bind(&x.into())?;
kindy.into_udp_socket()
}
Some(x @ SocketAddr::V6(_)) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv6(),
socket2::Type::dgram(),
Some(socket2::Protocol::udp()),
)?;
kindy.bind(&x.into())?;
kindy.into_udp_socket()
}
None => match globals.upstream_addr {
SocketAddr::V4(_) => net2::UdpBuilder::new_v4()?
.bind(SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, 0)))?,
SocketAddr::V6(s) => net2::UdpBuilder::new_v6()?.bind(SocketAddr::V6(
SocketAddrV6::new(Ipv6Addr::UNSPECIFIED, 0, s.flowinfo(), s.scope_id()),
))?,
SocketAddr::V4(_) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv4(),
socket2::Type::dgram(),
Some(socket2::Protocol::udp()),
)?;
kindy.into_udp_socket()
}
SocketAddr::V6(s) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv6(),
socket2::Type::dgram(),
Some(socket2::Protocol::udp()),
)?;
kindy.bind(
&SocketAddr::V6(SocketAddrV6::new(
Ipv6Addr::UNSPECIFIED,
0,
s.flowinfo(),
s.scope_id(),
))
.into(),
)?;
kindy.into_udp_socket()
}
},
};
let mut ext_socket = UdpSocket::from_std(std_socket)?;
@ -73,11 +109,37 @@ pub async fn resolve_tcp(
tid: u16,
) -> Result<Vec<u8>, Error> {
let std_socket = match globals.external_addr {
Some(x @ SocketAddr::V4(_)) => net2::TcpBuilder::new_v4()?.bind(&x)?.to_tcp_stream()?,
Some(x @ SocketAddr::V6(_)) => net2::TcpBuilder::new_v6()?.bind(&x)?.to_tcp_stream()?,
Some(x @ SocketAddr::V4(_)) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv4(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?;
kindy.bind(&x.into())?;
kindy.into_tcp_stream()
}
Some(x @ SocketAddr::V6(_)) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv6(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?;
kindy.bind(&x.into())?;
kindy.into_tcp_stream()
}
None => match globals.upstream_addr {
SocketAddr::V4(_) => net2::TcpBuilder::new_v4()?.to_tcp_stream()?,
SocketAddr::V6(_) => net2::TcpBuilder::new_v6()?.to_tcp_stream()?,
SocketAddr::V4(_) => socket2::Socket::new(
socket2::Domain::ipv4(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?
.into_tcp_stream(),
SocketAddr::V6(_) => socket2::Socket::new(
socket2::Domain::ipv6(),
socket2::Type::stream(),
Some(socket2::Protocol::tcp()),
)?
.into_tcp_stream(),
},
};
let mut ext_socket = TcpStream::connect_std(std_socket, &globals.upstream_addr).await?;

Loading…
Cancel
Save