clients: explicitly shutdown connection when killing client
This commit is contained in:
parent
7c63f4b2bf
commit
8da62e2ce9
1 changed files with 9 additions and 0 deletions
|
|
@ -10,7 +10,9 @@ use {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
futures_util::{FutureExt, select},
|
futures_util::{FutureExt, select},
|
||||||
|
run_on_drop::on_drop,
|
||||||
std::{collections::VecDeque, mem, rc::Rc, time::Duration},
|
std::{collections::VecDeque, mem, rc::Rc, time::Duration},
|
||||||
|
uapi::c,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub async fn client(data: Rc<Client>) {
|
pub async fn client(data: Rc<Client>) {
|
||||||
|
|
@ -42,6 +44,9 @@ pub async fn client(data: Rc<Client>) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn receive(data: Rc<Client>) {
|
async fn receive(data: Rc<Client>) {
|
||||||
|
let _shutdown_rd = on_drop(|| {
|
||||||
|
let _ = uapi::shutdown(data.socket.raw(), c::SHUT_RD);
|
||||||
|
});
|
||||||
let display = data.display().unwrap();
|
let display = data.display().unwrap();
|
||||||
let recv = async {
|
let recv = async {
|
||||||
let mut buf = BufFdIn::new(&data.socket, &data.state.ring);
|
let mut buf = BufFdIn::new(&data.socket, &data.state.ring);
|
||||||
|
|
@ -108,6 +113,10 @@ async fn receive(data: Rc<Client>) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn send(data: Rc<Client>) {
|
async fn send(data: Rc<Client>) {
|
||||||
|
let socket = data.socket.clone();
|
||||||
|
let _shutdown_wr = on_drop(|| {
|
||||||
|
let _ = uapi::shutdown(socket.raw(), c::SHUT_WR);
|
||||||
|
});
|
||||||
let send = async {
|
let send = async {
|
||||||
let mut out = BufFdOut::new(&data.socket, &data.state.ring);
|
let mut out = BufFdOut::new(&data.socket, &data.state.ring);
|
||||||
let mut buffers = VecDeque::new();
|
let mut buffers = VecDeque::new();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue