+ /* Ignore listeners */
+ if (fds[i]->listener)
+ continue;
+
+ c = (void *)fds[i];
+ if (c->plan[IO_IN].status == IO_WAITING
+ && c->plan[IO_IN].u1.const_vp == wait)
+ io_do_wakeup(c, &c->plan[IO_IN]);
+
+ if (c->plan[IO_OUT].status == IO_WAITING
+ && c->plan[IO_OUT].u1.const_vp == wait)
+ io_do_wakeup(c, &c->plan[IO_OUT]);
+ }
+}
+
+bool add_conn(struct io_conn *c)
+{
+ return add_fd(&c->fd, 0);
+}
+
+static void del_conn(struct io_conn *conn)
+{
+ del_fd(&conn->fd);
+ if (conn->finish) {
+ /* Saved by io_close */
+ errno = conn->plan[IO_IN].u1.s;
+ conn->finish(conn, conn->finish_arg);
+ }
+ tal_free(conn);
+}
+
+void del_listener(struct io_listener *l)
+{
+ del_fd(&l->fd);