]> git.ozlabs.org Git - ccan/blobdiff - ccan/io/benchmarks/run-different-speed.c
io: add io_fd_block() helper.
[ccan] / ccan / io / benchmarks / run-different-speed.c
index cbc9ad6a9f81c6cc531afe7d258a91d4163ef544..c540f48d3a12744317a6316a8acbc6e7c76a1f5f 100644 (file)
@@ -25,24 +25,24 @@ struct client {
        char reply_buffer[REPLY_SIZE];
 };
 
-static struct io_plan *write_reply(struct io_conn *conn, struct client *client);
-static struct io_plan *read_request(struct io_conn *conn, struct client *client)
+static struct io_plan write_reply(struct io_conn *conn, struct client *client);
+static struct io_plan read_request(struct io_conn *conn, struct client *client)
 {
        return io_read(client->request_buffer, REQUEST_SIZE,
-                      io_next(conn, write_reply, client));
+                      write_reply, client);
 }
 
 /* once we're done, loop again. */
-static struct io_plan *write_complete(struct io_conn *conn, struct client *client)
+static struct io_plan write_complete(struct io_conn *conn, struct client *client)
 {
        completed++;
        return read_request(conn, client);
 }
 
-static struct io_plan *write_reply(struct io_conn *conn, struct client *client)
+static struct io_plan write_reply(struct io_conn *conn, struct client *client)
 {
        return io_write(client->reply_buffer, REPLY_SIZE,
-                       io_next(conn, write_complete, client));
+                       write_complete, client);
 }
 
 /* This runs in the child. */
@@ -60,7 +60,7 @@ static void create_clients(struct sockaddr_un *addr, int waitfd)
                if (connect(sock[i], (void *)addr, sizeof(*addr)) != 0)
                        err(1, "connecting socket");
                /* Make nonblocking. */
-               fcntl(sock[i], F_SETFD, fcntl(sock[i], F_GETFD)|O_NONBLOCK);
+               io_fd_block(sock[i], false);
                done[i] = 0;
        }
 
@@ -106,14 +106,9 @@ static void sigalarm(int sig)
        write(timeout[1], "1", 1);
 }
 
-static struct io_plan *do_timeout(struct io_conn *conn, char *buf)
+static struct io_plan do_timeout(struct io_conn *conn, char *buf)
 {
-       return io_break(conn, NULL);
-}
-
-static struct io_plan *do_timeout_read(struct io_conn *conn, char *buf)
-{
-       return io_read(buf, 1, io_next(conn, do_timeout, buf));
+       return io_break(buf, io_idle());
 }
 
 int main(int argc, char *argv[])
@@ -155,11 +150,13 @@ int main(int argc, char *argv[])
                        if (ret < 0)
                                err(1, "Accepting fd");
                        /* For efficiency, we share client structure */
-                       io_new_conn(ret, read_request, NULL, &client);
+                       io_new_conn(ret,
+                                   io_read(client.request_buffer, REQUEST_SIZE,
+                                           write_reply, &client));
                }
        }
 
-       io_new_conn(timeout[0], do_timeout_read, NULL, &buf);
+       io_new_conn(timeout[0], io_read(&buf, 1, do_timeout, &buf));
 
        close(wake[0]);
        for (i = 0; i < NUM_CHILDREN; i++)