close efd on eof
authormarkus <markus@openbsd.org>
Tue, 4 Apr 2000 06:18:01 +0000 (06:18 +0000)
committermarkus <markus@openbsd.org>
Tue, 4 Apr 2000 06:18:01 +0000 (06:18 +0000)
usr.bin/ssh/channels.c

index 5e0bd65..4c67ade 100644 (file)
@@ -17,7 +17,7 @@
  */
 
 #include "includes.h"
-RCSID("$Id: channels.c,v 1.44 2000/04/03 07:07:15 markus Exp $");
+RCSID("$Id: channels.c,v 1.45 2000/04/04 06:18:01 markus Exp $");
 
 #include "ssh.h"
 #include "packet.h"
@@ -642,6 +642,7 @@ channel_handle_efd(Channel *c, fd_set * readset, fd_set * writeset)
        char buf[16*1024];
        int len;
 
+/** XXX handle drain efd, too */
        if (c->efd != -1) {
                if (c->extended_usage == CHAN_EXTENDED_WRITE &&
                    FD_ISSET(c->efd, writeset) &&
@@ -659,7 +660,12 @@ channel_handle_efd(Channel *c, fd_set * readset, fd_set * writeset)
                        len = read(c->efd, buf, sizeof(buf));
                        debug("channel %d: read %d from efd %d",
                             c->self, len, c->efd);
-                       if (len > 0)
+                       if (len == 0) {
+                               debug("channel %d: closing efd %d",
+                                   c->self, c->efd);
+                               close(c->efd);
+                               c->efd = -1;
+                       } else if (len > 0)
                                buffer_append(&c->extended, buf, len);
                }
        }