| ... | @@ -109,6 +109,7 @@ pub fn deinit(s: *Server) void { | ... | @@ -109,6 +109,7 @@ pub fn deinit(s: *Server) void { |
| 109 | pub fn receiveMessage(s: *Server) !InMessage.Header { | 109 | pub fn receiveMessage(s: *Server) !InMessage.Header { |
| 110 | const Header = InMessage.Header; | 110 | const Header = InMessage.Header; |
| 111 | const fifo = &s.receive_fifo; | 111 | const fifo = &s.receive_fifo; |
| | 112 | var last_amt_zero = false; |
| 112 | | 113 | |
| 113 | while (true) { | 114 | while (true) { |
| 114 | const buf = fifo.readableSlice(0); | 115 | const buf = fifo.readableSlice(0); |
| ... | @@ -136,6 +137,10 @@ pub fn receiveMessage(s: *Server) !InMessage.Header { | ... | @@ -136,6 +137,10 @@ pub fn receiveMessage(s: *Server) !InMessage.Header { |
| 136 | const write_buffer = try fifo.writableWithSize(256); | 137 | const write_buffer = try fifo.writableWithSize(256); |
| 137 | const amt = try s.in.read(write_buffer); | 138 | const amt = try s.in.read(write_buffer); |
| 138 | fifo.update(amt); | 139 | fifo.update(amt); |
| | 140 | if (amt == 0) { |
| | 141 | if (last_amt_zero) return error.BrokenPipe; |
| | 142 | last_amt_zero = true; |
| | 143 | } |
| 139 | } | 144 | } |
| 140 | } | 145 | } |
| 141 | | 146 | |