version 1.10, 2000/01/10 10:15:28 |
version 1.11, 2000/03/28 20:31:27 |
|
|
static void chan_send_oclose(Channel *c); |
static void chan_send_oclose(Channel *c); |
static void chan_shutdown_write(Channel *c); |
static void chan_shutdown_write(Channel *c); |
static void chan_shutdown_read(Channel *c); |
static void chan_shutdown_read(Channel *c); |
static void chan_delete_if_full_closed(Channel *c); |
|
|
|
/* |
/* |
* EVENTS update channel input/output states execute ACTIONS |
* EVENTS update channel input/output states execute ACTIONS |
|
|
error("chan_shutdown_read failed for #%d/fd%d [i%d o%d]: %.100s", |
error("chan_shutdown_read failed for #%d/fd%d [i%d o%d]: %.100s", |
c->self, c->sock, c->istate, c->ostate, strerror(errno)); |
c->self, c->sock, c->istate, c->ostate, strerror(errno)); |
} |
} |
static void |
void |
chan_delete_if_full_closed(Channel *c) |
chan_delete_if_full_closed(Channel *c) |
{ |
{ |
if (c->istate == CHAN_INPUT_CLOSED && c->ostate == CHAN_OUTPUT_CLOSED) { |
if (c->istate == CHAN_INPUT_CLOSED && c->ostate == CHAN_OUTPUT_CLOSED) { |