Try to use socket2 less

cart
Frank Denis 3 years ago
parent 156adf46c3
commit 869e873ad3

@ -10,7 +10,6 @@ use hyper::service::service_fn;
use hyper::{Body, Request, Response, StatusCode};
use prometheus::{self, Encoder, TextEncoder};
use std::mem;
use std::net::SocketAddr;
use std::sync::atomic::{AtomicU32, Ordering};
use std::sync::Arc;
use tokio::net::TcpListener;
@ -52,33 +51,7 @@ pub async fn prometheus_service(
runtime_handle: Handle,
) -> Result<(), Error> {
let path = Arc::new(metrics_config.path);
let std_socket = match metrics_config.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(&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()
}
};
std_socket.set_nonblocking(true)?;
let stream = TcpListener::from_std(std_socket)?;
let stream = TcpListener::bind(metrics_config.listen_addr).await?;
let concurrent_connections = Arc::new(AtomicU32::new(0));
loop {
let (client, _client_addr) = stream.accept().await?;

@ -9,7 +9,7 @@ use rand::prelude::*;
use siphasher::sip128::Hasher128;
use std::cmp;
use std::hash::Hasher;
use std::net::{Ipv6Addr, SocketAddr, SocketAddrV6};
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::{TcpSocket, UdpSocket};
@ -20,55 +20,24 @@ pub async fn resolve_udp(
tid: u16,
has_cached_response: bool,
) -> Result<Vec<u8>, Error> {
let std_socket = match globals.external_addr {
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()
}
let ext_socket = match globals.external_addr {
Some(x) => UdpSocket::bind(x).await?,
None => match globals.upstream_addr {
SocketAddr::V4(_) => {
let kindy = socket2::Socket::new(
socket2::Domain::ipv4(),
socket2::Type::dgram(),
Some(socket2::Protocol::udp()),
)?;
kindy.into_udp_socket()
UdpSocket::bind(&SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, 0)))
.await?
}
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()
UdpSocket::bind(&SocketAddr::V6(SocketAddrV6::new(
Ipv6Addr::UNSPECIFIED,
0,
s.flowinfo(),
s.scope_id(),
)))
.await?
}
},
};
std_socket.set_nonblocking(true)?;
let ext_socket = UdpSocket::from_std(std_socket)?;
ext_socket.connect(&globals.upstream_addr).await?;
dns::set_edns_max_payload_size(&mut packet, DNS_MAX_PACKET_SIZE as u16)?;
let mut response;

Loading…
Cancel
Save