@@ -62,10 +62,11 @@ impl Client {
6262 pub fn streams(
6363 rx: Box<dyn AsyncBufRead + Unpin + Send>,
6464 tx: Box<dyn AsyncWrite + Unpin + Send>,
65+ err: Option<Box<dyn AsyncBufRead + Unpin + Send>>,
6566 id: usize,
6667 process: Option<Child>,
6768 ) -> Result<(Self, UnboundedReceiver<Payload>)> {
68− let (server_rx, server_tx) = Transport::start(rx, tx, id);
69+ let (server_rx, server_tx) = Transport::start(rx, tx, err, id);
6970 let (client_rx, client_tx) = unbounded_channel();
7071
7172 let client = Self {
@@ -92,7 +93,7 @@ impl Client {
9293 ) -> Result<(Self, UnboundedReceiver<Payload>)> {
9394 let stream = TcpStream::connect(addr).await?;
9495 let (rx, tx) = stream.into_split();
95− Self::streams(Box::new(BufReader::new(rx)), Box::new(tx), id, None)
96+ Self::streams(Box::new(BufReader::new(rx)), Box::new(tx), None, id, None)
9697 }
9798
9899 pub fn stdio(
@@ -113,10 +114,12 @@ impl Client {
113114 // TODO: do we need bufreader/writer here? or do we use async wrappers on unblock?
114115 let writer = BufWriter::new(process.stdin.take().expect("Failed to open stdin"));
115116 let reader = BufReader::new(process.stdout.take().expect("Failed to open stdout"));
117+ let errors = BufReader::new(process.stderr.take().expect("Failed to open stderr"));
116118
117119 Self::streams(
118120 Box::new(BufReader::new(reader)),
119121 Box::new(writer),
122+ Some(Box::new(BufReader::new(errors))),
120123 id,
121124 Some(process),
122125 )
@@ -167,6 +170,7 @@ impl Client {
167170 Self::streams(
168171 Box::new(BufReader::new(rx)),
169172 Box::new(tx),
173+ None,
170174 id,
171175 Some(process),
172176 )