]> git.ozlabs.org Git - ccan/blob - ccan/io/backend.h
ccan/io: rewrite.
[ccan] / ccan / io / backend.h
1 /* Licensed under LGPLv2.1+ - see LICENSE file for details */
2 #ifndef CCAN_IO_BACKEND_H
3 #define CCAN_IO_BACKEND_H
4 #include <stdbool.h>
5 #include <poll.h>
6 #include "io_plan.h"
7
8 struct fd {
9         int fd;
10         bool listener;
11         size_t backend_info;
12 };
13
14 /* Listeners create connections. */
15 struct io_listener {
16         struct fd fd;
17
18         const tal_t *ctx;
19
20         /* These are for connections we create. */
21         struct io_plan *(*init)(struct io_conn *conn, void *arg);
22         void *arg;
23 };
24
25 /* One connection per client. */
26 struct io_conn {
27         struct fd fd;
28
29         /* always or closing list. */
30         struct io_conn *list;
31
32         void (*finish)(struct io_conn *, void *arg);
33         void *finish_arg;
34
35         struct io_plan plan[2];
36 };
37
38 extern void *io_loop_return;
39
40 bool add_listener(struct io_listener *l);
41 bool add_conn(struct io_conn *c);
42 bool add_duplex(struct io_conn *c);
43 void del_listener(struct io_listener *l);
44 void backend_new_closing(struct io_conn *conn);
45 void backend_new_always(struct io_conn *conn);
46 void backend_new_plan(struct io_conn *conn);
47
48 void backend_plan_done(struct io_conn *conn);
49
50 void backend_wake(const void *wait);
51 void backend_del_conn(struct io_conn *conn);
52
53 void io_ready(struct io_conn *conn, int pollflags);
54 void io_do_always(struct io_conn *conn);
55 void io_do_wakeup(struct io_conn *conn, struct io_plan *plan);
56 void *do_io_loop(struct io_conn **ready);
57 #endif /* CCAN_IO_BACKEND_H */