+void io_ready(struct io_conn *conn, int pollflags)
+{
+ if (pollflags & POLLIN)
+ do_plan(conn, &conn->plan[IO_IN]);
+
+ if (pollflags & POLLOUT)
+ do_plan(conn, &conn->plan[IO_OUT]);
+}
+
+void io_do_always(struct io_conn *conn)
+{
+ if (conn->plan[IO_IN].status == IO_ALWAYS)
+ next_plan(conn, &conn->plan[IO_IN]);
+
+ if (conn->plan[IO_OUT].status == IO_ALWAYS)
+ next_plan(conn, &conn->plan[IO_OUT]);
+}
+
+void io_do_wakeup(struct io_conn *conn, struct io_plan *plan)
+{
+ assert(plan->status == IO_WAITING);
+ next_plan(conn, plan);
+}
+