+ /* Save old flags, set nonblock if not already. */
+ plan->u1.s = fcntl(fd, F_GETFL);
+ fcntl(fd, F_SETFL, plan->u1.s | O_NONBLOCK);
+
+ /* Immediate connect can happen. */
+ if (connect(fd, addr->ai_addr, addr->ai_addrlen) == 0)
+ return set_always(conn, plan, next, arg);
+
+ if (errno != EINPROGRESS)
+ return io_close(conn);
+
+ plan->next = next;
+ plan->next_arg = arg;
+ plan->io = do_connect;
+
+ return plan;
+}
+
+struct io_plan *io_wait_(struct io_conn *conn,
+ const void *wait, enum io_direction dir,
+ struct io_plan *(*next)(struct io_conn *, void *),
+ void *arg)