/* -*-c-*-
*
- * $Id: chan.c,v 1.1 1999/07/01 08:56:23 mdw Exp $
+ * $Id: chan.c,v 1.2 1999/07/26 23:27:52 mdw Exp $
*
* Channel management
*
- * (c) 1999 Mark Wooding
+ * (c) 1999 Straylight/Edgeware
*/
/*----- Licensing notice --------------------------------------------------*
/*----- Revision history --------------------------------------------------*
*
* $Log: chan.c,v $
- * Revision 1.1 1999/07/01 08:56:23 mdw
- * Initial revision
+ * Revision 1.2 1999/07/26 23:27:52 mdw
+ * Minor modifications for new design.
+ *
+ * Revision 1.1.1.1 1999/07/01 08:56:23 mdw
+ * Initial revision.
*
*/
/* --- Close the output end if necessary --- */
- if (c->len == 0 && (c->f & CHANF_CLOSE)) {
- shutdown(fd, 1);
+ if (c->len == 0 && (c->f & CHANF_CLOSE))
c->func(c->p);
- }
return;
/* --- Force a close if an error occurred --- */
}
else if (r == 0)
goto close;
- else if (c->len == 0 && !(c->f & CHANF_READY))
+ else if (c->len == 0 && (c->f & CHANF_READY))
sel_addfile(&c->w);
c->len += r;
if (c->len == CHAN_BUFSZ)
close:
c->f |= CHANF_CLOSE;
- if (!c->len)
+ if (!c->len && (c->f & CHANF_READY))
sel_addfile(&c->w);
sel_rmfile(&c->r);
}
if (c->f & CHANF_READY)
return;
sel_initfile(sel, &c->w, fd, SEL_WRITE, writechan, c);
- if (c->len)
+ if (c->len || (c->f & CHANF_CLOSE))
sel_addfile(&c->w);
+ c->f |= CHANF_READY;
}
/* --- @chan_open@ --- *