diff options
Diffstat (limited to 'channels.c')
-rw-r--r-- | channels.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/channels.c b/channels.c index 2fa997edc..239e9dd83 100644 --- a/channels.c +++ b/channels.c | |||
@@ -1415,10 +1415,15 @@ channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset) | |||
1415 | 1415 | ||
1416 | if (c->rfd != -1 && | 1416 | if (c->rfd != -1 && |
1417 | FD_ISSET(c->rfd, readset)) { | 1417 | FD_ISSET(c->rfd, readset)) { |
1418 | errno = 0; | ||
1418 | len = read(c->rfd, buf, sizeof(buf)); | 1419 | len = read(c->rfd, buf, sizeof(buf)); |
1419 | if (len < 0 && (errno == EINTR || errno == EAGAIN)) | 1420 | if (len < 0 && (errno == EINTR || errno == EAGAIN)) |
1420 | return 1; | 1421 | return 1; |
1422 | #ifndef PTY_ZEROREAD | ||
1421 | if (len <= 0) { | 1423 | if (len <= 0) { |
1424 | #else | ||
1425 | if (len < 0 || (len == 0 && errno != 0)) { | ||
1426 | #endif | ||
1422 | debug2("channel %d: read<=0 rfd %d len %d", | 1427 | debug2("channel %d: read<=0 rfd %d len %d", |
1423 | c->self, c->rfd, len); | 1428 | c->self, c->rfd, len); |
1424 | if (c->type != SSH_CHANNEL_OPEN) { | 1429 | if (c->type != SSH_CHANNEL_OPEN) { |