diff --git a/Cargo.toml b/Cargo.toml index a6783a6db..73ab0f5ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -82,6 +82,7 @@ fxhash = "0.2.1" log = "0.4" mime = "0.3" net2 = "0.2.33" +socket2 = "0.3.11" pin-project = "0.4.6" regex = "1.3" serde = { version = "1.0", features=["derive"] } diff --git a/src/server.rs b/src/server.rs index 11cfbb6bc..6d72fb4c6 100644 --- a/src/server.rs +++ b/src/server.rs @@ -6,7 +6,7 @@ use actix_http::{body::MessageBody, Error, HttpService, KeepAlive, Request, Resp use actix_server::{Server, ServerBuilder}; use actix_service::{map_config, IntoServiceFactory, Service, ServiceFactory}; -use net2::TcpBuilder; +use socket2; #[cfg(unix)] use actix_http::Protocol; @@ -566,13 +566,14 @@ fn create_tcp_listener( addr: net::SocketAddr, backlog: i32, ) -> io::Result { - let builder = match addr { - net::SocketAddr::V4(_) => TcpBuilder::new_v4()?, - net::SocketAddr::V6(_) => TcpBuilder::new_v6()?, + let socket_domain = match addr { + net::SocketAddr::V4(_) => socket2::Domain::ipv4(), + net::SocketAddr::V6(_) => socket2::Domain::ipv6(), }; - builder.reuse_address(true)?; - builder.bind(addr)?; - Ok(builder.listen(backlog)?) + let socket = socket2::Socket::new(socket_domain, socket2::Type::stream(), None)?; + socket.bind(&socket2::SockAddr::from(addr))?; + socket.listen(backlog)?; + Ok(socket.into_tcp_listener()) } #[cfg(feature = "openssl")]