mirror of
https://github.com/janet-lang/janet
synced 2024-11-25 01:37:19 +00:00
When reading from a stream, EPIPE is considered EOS.
Before, EPIPE caused an error, but in most cases it is better to consider it an end of stream. In the future, we may want to allow cusomtization of this behavior with flags on the stream but for now let's keep it simpler.
This commit is contained in:
parent
760e4e3d68
commit
078f50d45a
@ -2,6 +2,7 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## Unreleased - ???
|
||||
- Add `upscope` special form.
|
||||
- `os/execute` and `os/spawn` can take streams for redirecting IO.
|
||||
- Add `;parser` and `:read` parameters to `run-context`.
|
||||
- Add `os/open` if ev is enabled.
|
||||
|
@ -1317,10 +1317,17 @@ JanetAsyncStatus ev_machine_read(JanetListenerState *s, JanetAsyncEvent event) {
|
||||
|
||||
/* Check for errors - special case errors that can just be waited on to fix */
|
||||
if (nread == -1) {
|
||||
if (errno == EAGAIN || errno == EWOULDBLOCK) break;
|
||||
if (errno == EAGAIN || errno == EWOULDBLOCK) {
|
||||
return JANET_ASYNC_STATUS_NOT_DONE;
|
||||
}
|
||||
/* In stream protocols, a pipe error is end of stream */
|
||||
if (errno == EPIPE && (state->mode != JANET_ASYNC_READMODE_RECVFROM)) {
|
||||
nread = 0;
|
||||
} else {
|
||||
janet_cancel(s->fiber, janet_ev_lasterr());
|
||||
return JANET_ASYNC_STATUS_DONE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Only allow 0-length packets in recv-from. In stream protocols, a zero length packet is EOS. */
|
||||
state->bytes_read += nread;
|
||||
|
Loading…
Reference in New Issue
Block a user