]> andersk Git - openssh.git/commitdiff
- (djm) Suppress error messages on channel close shutdown() failurs
authordjm <djm>
Mon, 7 Aug 2000 05:47:48 +0000 (05:47 +0000)
committerdjm <djm>
Mon, 7 Aug 2000 05:47:48 +0000 (05:47 +0000)
   works around Linux bug. Patch from Zack Weinberg <zack@wolery.cumb.org>

ChangeLog
nchan.c

index 1c2ac891f8a6642b746e1ad920e132e7f9c1e8ec..04caaafbc6f2129065a95e4671ba2bd020e941cb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 20000807
  - (djm) Set 0755 on binaries during install. 
+ - (djm) Suppress error messages on channel close shutdown() failurs
+   works around Linux bug. Patch from Zack Weinberg <zack@wolery.cumb.org>
 
 20000725
  - (djm) Fix autoconf typo: HAVE_BINRESVPORT_AF -> HAVE_BINDRESVPORT_AF
diff --git a/nchan.c b/nchan.c
index cef56497bc1b29b428002845c114900e3857343a..51c5a4cadcbd23b03d32bc7f5e8d416bc6130527 100644 (file)
--- a/nchan.c
+++ b/nchan.c
@@ -483,7 +483,14 @@ chan_shutdown_read(Channel *c)
                return;
        debug("channel %d: close_read", c->self);
        if (c->sock != -1) {
-               if (shutdown(c->sock, SHUT_RD) < 0)
+               /* 
+                * shutdown(sock, SHUT_READ) may return ENOTCONN if the
+                * write side has been closed already. (bug on Linux)
+                */
+               if (shutdown(c->sock, SHUT_RD) < 0
+                   && (errno != ENOTCONN
+                       || c->ostate == CHAN_OUTPUT_OPEN
+                       || c->ostate == CHAN_OUTPUT_WAIT_DRAIN))
                        error("channel %d: chan_shutdown_read: shutdown() failed for fd%d [i%d o%d]: %.100s",
                            c->self, c->sock, c->istate, c->ostate, strerror(errno));
        } else {
This page took 0.033344 seconds and 5 git commands to generate.