chiark / gitweb /
rx queue, missing boundaries
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 3 Aug 2021 23:07:28 +0000 (00:07 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 3 Aug 2021 23:07:28 +0000 (00:07 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/client.rs
src/prelude.rs

index 56a6c6d1d5ef199c3275db2d426ebd6fc4178528..8e2641483bfff919ecb7238b372ae7b8592aea1e 100644 (file)
@@ -184,7 +184,7 @@ async fn run_client<C:HCC>(
   let mut req_num: ReqNum = 0;
 
   let tx_stream = ipif.stdout.take().unwrap();
-  let rx_stream = ipif.stdin .take().unwrap();
+  let mut rx_stream = ipif.stdin .take().unwrap();
 
   let mut tx_stream = tokio::io::BufReader::new(tx_stream).split(SLIP_END);
   let mut packets: VecDeque<Box<[u8]>> = default();
@@ -200,6 +200,12 @@ async fn run_client<C:HCC>(
   async {
     loop {
       select! {
+        y = rx_stream.write_all_buf(&mut rx_queue),
+        if ! rx_queue.is_empty() =>
+        {
+          let () = y.context("write rx data to ipif")?;
+        },
+
         data = tx_stream.next_segment(),
         if packets.is_empty() =>
         {
@@ -265,8 +271,6 @@ async fn run_client<C:HCC>(
             }, |e| error!("{} #{}: rx discarding: {}", &ic, req_num, e));
           
             dbg!(&rx_queue);
-            // xxx do writing with
-            //  tokio::io::AsyncWriteExt::write_all_buf
           }
         }
       }
index c9c11bef73d8e61f492d62e7b15087fc4e09ed08..6fffe92fb97710b1786cf1dd4c04d44c972f7b7f 100644 (file)
@@ -36,7 +36,7 @@ pub use lazy_regex::{regex_is_match, regex_replace_all};
 pub use log::{trace, debug, info, warn, error};
 pub use structopt::StructOpt;
 pub use thiserror::Error;
-pub use tokio::io::AsyncBufReadExt;
+pub use tokio::io::{AsyncBufReadExt, AsyncWriteExt};
 pub use tokio::pin;
 pub use tokio::select;
 pub use tokio::task;