diff --git a/CHANGES.md b/CHANGES.md index ab660808..d5f36a9c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,8 @@ * Bump minimum supported Rust version to 1.40 +* Replace deprecated `net2` crate with `socket2` + [#1485]: https://github.com/actix/actix-web/pull/1485 [#1509]: https://github.com/actix/actix-web/pull/1509 diff --git a/Cargo.toml b/Cargo.toml index ce26e82e..a7b6e70d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -90,7 +90,7 @@ futures-util = { version = "0.3.5", default-features = false } fxhash = "0.2.1" log = "0.4" mime = "0.3" -net2 = "0.2.33" +socket2 = "0.3" 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 248cd39b..b2695b00 100644 --- a/src/server.rs +++ b/src/server.rs @@ -6,8 +6,6 @@ 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; - #[cfg(unix)] use actix_http::Protocol; #[cfg(unix)] @@ -562,13 +560,16 @@ 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()?, + use socket2::{Domain, Protocol, Socket, Type}; + let domain = match addr { + net::SocketAddr::V4(_) => Domain::ipv4(), + net::SocketAddr::V6(_) => Domain::ipv6(), }; - builder.reuse_address(true)?; - builder.bind(addr)?; - Ok(builder.listen(backlog)?) + let socket = Socket::new(domain, Type::stream(), Some(Protocol::tcp()))?; + socket.set_reuse_address(true)?; + socket.bind(&addr.into())?; + socket.listen(backlog)?; + Ok(socket.into_tcp_listener()) } #[cfg(feature = "openssl")] diff --git a/src/test.rs b/src/test.rs index 79e351eb..684e9c11 100644 --- a/src/test.rs +++ b/src/test.rs @@ -21,10 +21,10 @@ use bytes::{Bytes, BytesMut}; use futures_core::Stream; use futures_util::future::ok; use futures_util::StreamExt; -use net2::TcpBuilder; use serde::de::DeserializeOwned; use serde::Serialize; use serde_json; +use socket2::{Domain, Protocol, Socket, Type}; pub use actix_http::test::TestBuffer; @@ -913,10 +913,10 @@ impl TestServerConfig { /// Get first available unused address pub fn unused_addr() -> net::SocketAddr { let addr: net::SocketAddr = "127.0.0.1:0".parse().unwrap(); - let socket = TcpBuilder::new_v4().unwrap(); - socket.bind(&addr).unwrap(); - socket.reuse_address(true).unwrap(); - let tcp = socket.to_tcp_listener().unwrap(); + let socket = Socket::new(Domain::ipv4(), Type::stream(), Some(Protocol::tcp())).unwrap(); + socket.bind(&addr.into()).unwrap(); + socket.set_reuse_address(true).unwrap(); + let tcp = socket.into_tcp_listener(); tcp.local_addr().unwrap() } diff --git a/tests/test_httpserver.rs b/tests/test_httpserver.rs index ecd5c9ff..750084fd 100644 --- a/tests/test_httpserver.rs +++ b/tests/test_httpserver.rs @@ -1,25 +1,15 @@ -use net2::TcpBuilder; use std::sync::mpsc; -use std::{net, thread, time::Duration}; +use std::{thread, time::Duration}; #[cfg(feature = "openssl")] use open_ssl::ssl::SslAcceptorBuilder; -use actix_web::{web, App, HttpResponse, HttpServer}; - -fn unused_addr() -> net::SocketAddr { - let addr: net::SocketAddr = "127.0.0.1:0".parse().unwrap(); - let socket = TcpBuilder::new_v4().unwrap(); - socket.bind(&addr).unwrap(); - socket.reuse_address(true).unwrap(); - let tcp = socket.to_tcp_listener().unwrap(); - tcp.local_addr().unwrap() -} +use actix_web::{test, web, App, HttpResponse, HttpServer}; #[cfg(unix)] #[actix_rt::test] async fn test_start() { - let addr = unused_addr(); + let addr = test::unused_addr(); let (tx, rx) = mpsc::channel(); thread::spawn(move || { @@ -92,7 +82,7 @@ fn ssl_acceptor() -> std::io::Result { async fn test_start_ssl() { use actix_web::HttpRequest; - let addr = unused_addr(); + let addr = test::unused_addr(); let (tx, rx) = mpsc::channel(); thread::spawn(move || {