update to stable tokio 0.3.0

This commit is contained in:
Naim A 2020-10-15 20:31:25 +03:00
parent 544a5d40a8
commit 18a686bf2f
2 changed files with 13 additions and 20 deletions

View file

@ -12,7 +12,7 @@ lto = "fat"
serde = {version = "1.0", features = ["derive"]} serde = {version = "1.0", features = ["derive"]}
bincode = "1.3" bincode = "1.3"
warp = {version = "0.2", default-features = false} warp = {version = "0.2", default-features = false}
tokio = {version = "0.3", features = ["macros", "net", "time", "stream", "rt-threaded", "fs", "sync", "blocking", "signal"]} tokio = {version = "0.3", features = ["macros", "io-util", "net", "time", "stream", "rt-multi-thread", "fs", "sync", "signal"]}
tokio-util = {version = "0.4", features = ["compat"]} tokio-util = {version = "0.4", features = ["compat"]}
binascii = "0.1" binascii = "0.1"
toml = "0.5" toml = "0.5"
@ -23,7 +23,3 @@ serde_json = "1.0"
futures = "0.3" futures = "0.3"
async-compression = {version = "0.3", features = ["bzip2", "futures-bufread", "futures-write"]} async-compression = {version = "0.3", features = ["bzip2", "futures-bufread", "futures-write"]}
chrono = "0.4" chrono = "0.4"
[patch.crates-io]
tokio = {git = "https://github.com/tokio-rs/tokio", rev = "3fd043931e6d37f211e682980edc6e12e9d4fc54", features = ["macros", "net", "time", "stream", "rt-threaded", "fs", "sync", "blocking", "signal"]}
tokio-util = {git = "https://github.com/tokio-rs/tokio", rev = "3fd043931e6d37f211e682980edc6e12e9d4fc54", features = ["compat"]}

View file

@ -107,8 +107,7 @@ struct UDPScrapeResponseEntry {
} }
pub struct UDPTracker { pub struct UDPTracker {
srv_send: tokio::net::udp::SendHalf, srv: tokio::net::UdpSocket,
srv_recv: Option<tokio::net::udp::RecvHalf>,
tracker: std::sync::Arc<tracker::TorrentTracker>, tracker: std::sync::Arc<tracker::TorrentTracker>,
config: Arc<Configuration>, config: Arc<Configuration>,
} }
@ -119,12 +118,10 @@ impl UDPTracker {
) -> Result<UDPTracker, std::io::Error> { ) -> Result<UDPTracker, std::io::Error> {
let cfg = config.clone(); let cfg = config.clone();
let server = UdpSocket::bind(cfg.get_udp_config().get_address()).await?; let srv = UdpSocket::bind(cfg.get_udp_config().get_address()).await?;
let (srv_recv, srv_send) = server.split();
Ok(UDPTracker { Ok(UDPTracker {
srv_send, srv,
srv_recv: Some(srv_recv),
tracker, tracker,
config: cfg, config: cfg,
}) })
@ -360,12 +357,13 @@ impl UDPTracker {
} }
async fn send_packet(&self, remote_addr: &SocketAddr, payload: &[u8]) -> Result<usize, std::io::Error> { async fn send_packet(&self, remote_addr: &SocketAddr, payload: &[u8]) -> Result<usize, std::io::Error> {
tokio::future::poll_fn(|cx| self.srv_send.as_ref().poll_send_to(cx, payload, remote_addr)) match self.srv.send_to(payload, remote_addr).await {
.await Err(err) => {
.map_err(|e| { debug!("failed to send a packet: {}", err);
debug!("failed to send a packet: {}", e); Err(err)
e },
}) Ok(sz) => Ok(sz),
}
} }
async fn send_error(&self, remote_addr: &SocketAddr, header: &UDPRequestHeader, error_msg: &str) { async fn send_error(&self, remote_addr: &SocketAddr, header: &UDPRequestHeader, error_msg: &str) {
@ -383,13 +381,12 @@ impl UDPTracker {
} }
} }
pub async fn accept_packets(mut self) -> Result<(), std::io::Error> { pub async fn accept_packets(self) -> Result<(), std::io::Error> {
let mut recv = self.srv_recv.take().unwrap();
let tracker = Arc::new(self); let tracker = Arc::new(self);
loop { loop {
let mut packet = vec![0u8; MAX_PACKET_SIZE]; let mut packet = vec![0u8; MAX_PACKET_SIZE];
let (size, remote_address) = recv.recv_from(packet.as_mut_slice()).await?; let (size, remote_address) = tracker.srv.recv_from(packet.as_mut_slice()).await?;
let tracker = tracker.clone(); let tracker = tracker.clone();
tokio::spawn(async move { tokio::spawn(async move {