+ return false;
+}
+
+void backend_add_timeout(struct io_conn *conn, struct timespec duration)
+{
+ if (!timeouts.base)
+ timers_init(&timeouts, time_now());
+ timer_add(&timeouts, &conn->timeout->timer,
+ time_add(time_now(), duration));
+ conn->timeout->conn = conn;
+}
+
+void backend_del_timeout(struct io_conn *conn)
+{
+ assert(conn->timeout->conn == conn);
+ timer_del(&timeouts, &conn->timeout->timer);
+ conn->timeout->conn = NULL;
+}
+
+static void handle_always(void)
+{
+ int i;
+
+ some_always = false;
+
+ for (i = 0; i < num_fds && !io_loop_return; i++) {
+ struct io_conn *c = (void *)fds[i];
+
+ if (fds[i]->listener)
+ continue;
+
+ if (c->plan.pollflag == POLLALWAYS)
+ io_ready(c);
+
+ if (c->duplex && c->duplex->plan.pollflag == POLLALWAYS)
+ io_ready(c->duplex);
+ }