update to stable tokio 0.3.0
This commit is contained in:
parent
544a5d40a8
commit
18a686bf2f
|
@ -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"]}
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue