#include <sys/wait.h>
#include <stdio.h>
+#ifdef DEBUG_CONN
+#define PORT "64005"
+#else
+#define PORT "65005"
+#endif
+
struct data {
int state;
size_t bytes;
char *buf;
};
-static struct io_plan start_ok(struct io_conn *conn, struct data *d)
+static void finish_ok(struct io_conn *conn, struct data *d)
{
- ok1(d->state == 0);
+ ok1(d->state == 1);
d->state++;
- return io_write(conn, d->buf, d->bytes, io_close, d);
+ io_break(d);
}
-static void finish_ok(struct io_conn *conn, struct data *d)
+static struct io_plan *init_conn(struct io_conn *conn, struct data *d)
{
- ok1(d->state == 1);
+#ifdef DEBUG_CONN
+ io_set_debug(conn, true);
+#endif
+ ok1(d->state == 0);
d->state++;
- io_break(conn, d, NULL, NULL);
+ io_set_finish(conn, finish_ok, d);
+ return io_write(conn, d->buf, d->bytes, io_close_cb, d);
}
static int make_listen_fd(const char *port, struct addrinfo **info)
d->bytes = 1024*1024;
d->buf = malloc(d->bytes);
memset(d->buf, 'a', d->bytes);
- fd = make_listen_fd("65005", &addrinfo);
+ fd = make_listen_fd(PORT, &addrinfo);
ok1(fd >= 0);
- l = io_new_listener(fd, start_ok, finish_ok, d);
+ l = io_new_listener(NULL, fd, init_conn, d);
ok1(l);
fflush(stdout);
if (!fork()) {
free(d);
exit(0);
}
- ok1(io_loop() == d);
+ ok1(io_loop(NULL, NULL) == d);
ok1(d->state == 2);
ok1(wait(&status));