fdtab[fd].cb[DIR_RD].f = si->sock.read;
fdtab[fd].cb[DIR_WR].f = si->sock.write;
fdtab[fd].state = FD_STREADY;
+ si->exp = TICK_ETERNITY;
out_wakeup:
task_wakeup(si->owner, TASK_WOKEN_IO);
b_adv(b, fwd);
}
- if (fdtab[fd].state == FD_STCONN)
+ if (fdtab[fd].state == FD_STCONN) {
fdtab[fd].state = FD_STREADY;
+ si->exp = TICK_ETERNITY;
+ }
b->flags |= BF_READ_PARTIAL;
b->total += ret;
ret = send(si->fd, trash + ret + si->send_proxy_ofs, -si->send_proxy_ofs,
(b->flags & BF_OUT_EMPTY) ? 0 : MSG_MORE);
if (ret > 0) {
- if (fdtab[si->fd].state == FD_STCONN)
+ if (fdtab[si->fd].state == FD_STCONN) {
fdtab[si->fd].state = FD_STREADY;
+ si->exp = TICK_ETERNITY;
+ }
si->send_proxy_ofs += ret; /* becomes zero once complete */
b->flags |= BF_WRITE_NULL; /* connect() succeeded */
}
if (ret > 0) {
- if (fdtab[si->fd].state == FD_STCONN)
+ if (fdtab[si->fd].state == FD_STCONN) {
fdtab[si->fd].state = FD_STREADY;
+ si->exp = TICK_ETERNITY;
+ }
b->flags |= BF_WRITE_PARTIAL;