diff options
| -rw-r--r-- | niri-ipc/src/socket.rs | 12 | ||||
| -rw-r--r-- | src/ipc/server.rs | 3 |
2 files changed, 9 insertions, 6 deletions
diff --git a/niri-ipc/src/socket.rs b/niri-ipc/src/socket.rs index 67b9625c..3964f000 100644 --- a/niri-ipc/src/socket.rs +++ b/niri-ipc/src/socket.rs @@ -1,7 +1,7 @@ //! Helper for blocking communication over the niri socket. use std::env; -use std::io::{self, Read, Write}; +use std::io::{self, BufRead, BufReader, Write}; use std::net::Shutdown; use std::os::unix::net::UnixStream; use std::path::Path; @@ -50,14 +50,16 @@ impl Socket { pub fn send(self, request: Request) -> io::Result<Reply> { let Self { mut stream } = self; - let mut buf = serde_json::to_vec(&request).unwrap(); - stream.write_all(&buf)?; + let mut buf = serde_json::to_string(&request).unwrap(); + stream.write_all(buf.as_bytes())?; stream.shutdown(Shutdown::Write)?; + let mut reader = BufReader::new(stream); + buf.clear(); - stream.read_to_end(&mut buf)?; + reader.read_line(&mut buf)?; - let reply = serde_json::from_slice(&buf)?; + let reply = serde_json::from_str(&buf)?; Ok(reply) } } diff --git a/src/ipc/server.rs b/src/ipc/server.rs index 5b614a83..5d2c8524 100644 --- a/src/ipc/server.rs +++ b/src/ipc/server.rs @@ -132,7 +132,8 @@ async fn handle_client(ctx: ClientCtx, stream: Async<'_, UnixStream>) -> anyhow: } } - let buf = serde_json::to_vec(&reply).context("error formatting reply")?; + let mut buf = serde_json::to_vec(&reply).context("error formatting reply")?; + buf.push(b'\n'); write.write_all(&buf).await.context("error writing reply")?; Ok(()) |
