diff options
author | Damien Miller <djm@mindrot.org> | 2008-07-04 23:10:49 +1000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2008-07-04 23:10:49 +1000 |
commit | d8968adb5faef58508bb5e7dab7cdbaf5b0e90d5 (patch) | |
tree | 33357b9d71f2d3e72b8383e2b3771773914425f4 /serverloop.c | |
parent | b01bac109bd2fc6b3093fe4aeb31a125be8f2a4e (diff) |
- (djm) [atomicio.c channels.c clientloop.c defines.h includes.h]
[packet.c scp.c serverloop.c sftp-client.c ssh-agent.c ssh-keyscan.c]
[sshd.c] Explicitly handle EWOULDBLOCK wherever we handle EAGAIN, on
some platforms (HP nonstop) it is a distinct errno;
bz#1467 reported by sconeu AT yahoo.com; ok dtucker@
Diffstat (limited to 'serverloop.c')
-rw-r--r-- | serverloop.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/serverloop.c b/serverloop.c index bd6f82dc1..77d9dee75 100644 --- a/serverloop.c +++ b/serverloop.c | |||
@@ -400,7 +400,8 @@ process_input(fd_set *readset) | |||
400 | return; | 400 | return; |
401 | cleanup_exit(255); | 401 | cleanup_exit(255); |
402 | } else if (len < 0) { | 402 | } else if (len < 0) { |
403 | if (errno != EINTR && errno != EAGAIN) { | 403 | if (errno != EINTR && errno != EAGAIN && |
404 | errno != EWOULDBLOCK) { | ||
404 | verbose("Read error from remote host " | 405 | verbose("Read error from remote host " |
405 | "%.100s: %.100s", | 406 | "%.100s: %.100s", |
406 | get_remote_ipaddr(), strerror(errno)); | 407 | get_remote_ipaddr(), strerror(errno)); |
@@ -418,8 +419,8 @@ process_input(fd_set *readset) | |||
418 | if (!fdout_eof && FD_ISSET(fdout, readset)) { | 419 | if (!fdout_eof && FD_ISSET(fdout, readset)) { |
419 | errno = 0; | 420 | errno = 0; |
420 | len = read(fdout, buf, sizeof(buf)); | 421 | len = read(fdout, buf, sizeof(buf)); |
421 | if (len < 0 && (errno == EINTR || | 422 | if (len < 0 && (errno == EINTR || ((errno == EAGAIN || |
422 | (errno == EAGAIN && !child_terminated))) { | 423 | errno == EWOULDBLOCK) && !child_terminated))) { |
423 | /* do nothing */ | 424 | /* do nothing */ |
424 | #ifndef PTY_ZEROREAD | 425 | #ifndef PTY_ZEROREAD |
425 | } else if (len <= 0) { | 426 | } else if (len <= 0) { |
@@ -437,8 +438,8 @@ process_input(fd_set *readset) | |||
437 | if (!fderr_eof && FD_ISSET(fderr, readset)) { | 438 | if (!fderr_eof && FD_ISSET(fderr, readset)) { |
438 | errno = 0; | 439 | errno = 0; |
439 | len = read(fderr, buf, sizeof(buf)); | 440 | len = read(fderr, buf, sizeof(buf)); |
440 | if (len < 0 && (errno == EINTR || | 441 | if (len < 0 && (errno == EINTR || ((errno == EAGAIN || |
441 | (errno == EAGAIN && !child_terminated))) { | 442 | errno == EWOULDBLOCK) && !child_terminated))) { |
442 | /* do nothing */ | 443 | /* do nothing */ |
443 | #ifndef PTY_ZEROREAD | 444 | #ifndef PTY_ZEROREAD |
444 | } else if (len <= 0) { | 445 | } else if (len <= 0) { |
@@ -469,7 +470,8 @@ process_output(fd_set *writeset) | |||
469 | data = buffer_ptr(&stdin_buffer); | 470 | data = buffer_ptr(&stdin_buffer); |
470 | dlen = buffer_len(&stdin_buffer); | 471 | dlen = buffer_len(&stdin_buffer); |
471 | len = write(fdin, data, dlen); | 472 | len = write(fdin, data, dlen); |
472 | if (len < 0 && (errno == EINTR || errno == EAGAIN)) { | 473 | if (len < 0 && |
474 | (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)) { | ||
473 | /* do nothing */ | 475 | /* do nothing */ |
474 | } else if (len <= 0) { | 476 | } else if (len <= 0) { |
475 | if (fdin != fdout) | 477 | if (fdin != fdout) |