io.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. /* Licensed under LGPLv2.1+ - see LICENSE file for details */
  2. #ifndef CCAN_IO_H
  3. #define CCAN_IO_H
  4. #include <ccan/typesafe_cb/typesafe_cb.h>
  5. #include <ccan/time/time.h>
  6. #include <stdbool.h>
  7. #include <unistd.h>
  8. #include "io_plan.h"
  9. /**
  10. * io_new_conn - create a new connection.
  11. * @fd: the file descriptor.
  12. * @plan: the first I/O to perform.
  13. *
  14. * This creates a connection which owns @fd. @plan will be called on the
  15. * next io_loop().
  16. *
  17. * Returns NULL on error (and sets errno).
  18. *
  19. * Example:
  20. * int fd[2];
  21. * struct io_conn *conn;
  22. *
  23. * pipe(fd);
  24. * // Plan is to close the fd immediately.
  25. * conn = io_new_conn(fd[0], io_close());
  26. * if (!conn)
  27. * exit(1);
  28. */
  29. #define io_new_conn(fd, plan) \
  30. (io_plan_no_debug(), io_new_conn_((fd), (plan)))
  31. struct io_conn *io_new_conn_(int fd, struct io_plan plan);
  32. /**
  33. * io_set_finish - set finish function on a connection.
  34. * @conn: the connection.
  35. * @finish: the function to call when it's closed or fails.
  36. * @arg: the argument to @finish.
  37. *
  38. * @finish will be called when an I/O operation fails, or you call
  39. * io_close() on the connection. errno will be set to the value
  40. * after the failed I/O, or at the call to io_close().
  41. *
  42. * Example:
  43. * static void finish(struct io_conn *conn, void *unused)
  44. * {
  45. * // errno is not 0 after success, so this is a bit useless.
  46. * printf("Conn %p closed with errno %i\n", conn, errno);
  47. * }
  48. * ...
  49. * io_set_finish(conn, finish, NULL);
  50. */
  51. #define io_set_finish(conn, finish, arg) \
  52. io_set_finish_((conn), \
  53. typesafe_cb_preargs(void, void *, \
  54. (finish), (arg), \
  55. struct io_conn *), \
  56. (arg))
  57. void io_set_finish_(struct io_conn *conn,
  58. void (*finish)(struct io_conn *, void *),
  59. void *arg);
  60. /**
  61. * io_new_listener - create a new accepting listener.
  62. * @fd: the file descriptor.
  63. * @init: the function to call for a new connection
  64. * @arg: the argument to @init.
  65. *
  66. * When @fd becomes readable, we accept() and pass that fd to init().
  67. *
  68. * Returns NULL on error (and sets errno).
  69. *
  70. * Example:
  71. * #include <sys/types.h>
  72. * #include <sys/socket.h>
  73. * #include <netdb.h>
  74. *
  75. * static void start_conn(int fd, char *msg)
  76. * {
  77. * printf("%s fd %i\n", msg, fd);
  78. * close(fd);
  79. * }
  80. *
  81. * // Set up a listening socket, return it.
  82. * static struct io_listener *do_listen(const char *port)
  83. * {
  84. * struct addrinfo *addrinfo, hints;
  85. * int fd, on = 1;
  86. *
  87. * memset(&hints, 0, sizeof(hints));
  88. * hints.ai_family = AF_UNSPEC;
  89. * hints.ai_socktype = SOCK_STREAM;
  90. * hints.ai_flags = AI_PASSIVE;
  91. * hints.ai_protocol = 0;
  92. *
  93. * if (getaddrinfo(NULL, port, &hints, &addrinfo) != 0)
  94. * return NULL;
  95. *
  96. * fd = socket(addrinfo->ai_family, addrinfo->ai_socktype,
  97. * addrinfo->ai_protocol);
  98. * if (fd < 0)
  99. * return NULL;
  100. *
  101. * freeaddrinfo(addrinfo);
  102. * setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
  103. * if (bind(fd, addrinfo->ai_addr, addrinfo->ai_addrlen) != 0) {
  104. * close(fd);
  105. * return NULL;
  106. * }
  107. * if (listen(fd, 1) != 0) {
  108. * close(fd);
  109. * return NULL;
  110. * }
  111. * return io_new_listener(fd, start_conn, (char *)"Got one!");
  112. * }
  113. */
  114. #define io_new_listener(fd, init, arg) \
  115. io_new_listener_((fd), \
  116. typesafe_cb_preargs(void, void *, \
  117. (init), (arg), \
  118. int fd), \
  119. (arg))
  120. struct io_listener *io_new_listener_(int fd,
  121. void (*init)(int fd, void *arg),
  122. void *arg);
  123. /**
  124. * io_close_listener - delete a listener.
  125. * @listener: the listener returned from io_new_listener.
  126. *
  127. * This closes the fd and frees @listener.
  128. *
  129. * Example:
  130. * ...
  131. * struct io_listener *l = do_listen("8111");
  132. * if (l) {
  133. * io_loop();
  134. * io_close_listener(l);
  135. * }
  136. */
  137. void io_close_listener(struct io_listener *listener);
  138. /**
  139. * io_write - plan to write data.
  140. * @data: the data buffer.
  141. * @len: the length to write.
  142. * @cb: function to call once it's done.
  143. * @arg: @cb argument
  144. *
  145. * This creates a plan write out a data buffer. Once it's all
  146. * written, the @cb function will be called: on an error, the finish
  147. * function is called instead.
  148. *
  149. * Note that the I/O may actually be done immediately.
  150. *
  151. * Example:
  152. * static void start_conn_with_write(int fd, const char *msg)
  153. * {
  154. * // Write message, then close.
  155. * io_new_conn(fd, io_write(msg, strlen(msg), io_close_cb, NULL));
  156. * }
  157. */
  158. #define io_write(data, len, cb, arg) \
  159. io_debug(io_write_((data), (len), \
  160. typesafe_cb_preargs(struct io_plan, void *, \
  161. (cb), (arg), struct io_conn *), \
  162. (arg)))
  163. struct io_plan io_write_(const void *data, size_t len,
  164. struct io_plan (*cb)(struct io_conn *, void *),
  165. void *arg);
  166. /**
  167. * io_read - plan to read data.
  168. * @data: the data buffer.
  169. * @len: the length to read.
  170. * @cb: function to call once it's done.
  171. * @arg: @cb argument
  172. *
  173. * This creates a plan to read data into a buffer. Once it's all
  174. * read, the @cb function will be called: on an error, the finish
  175. * function is called instead.
  176. *
  177. * Note that the I/O may actually be done immediately.
  178. *
  179. * Example:
  180. * static void start_conn_with_read(int fd, char msg[12])
  181. * {
  182. * // Read message, then close.
  183. * io_new_conn(fd, io_read(msg, 12, io_close_cb, NULL));
  184. * }
  185. */
  186. #define io_read(data, len, cb, arg) \
  187. io_debug(io_read_((data), (len), \
  188. typesafe_cb_preargs(struct io_plan, void *, \
  189. (cb), (arg), struct io_conn *), \
  190. (arg)))
  191. struct io_plan io_read_(void *data, size_t len,
  192. struct io_plan (*cb)(struct io_conn *, void *),
  193. void *arg);
  194. /**
  195. * io_read_partial - plan to read some data.
  196. * @data: the data buffer.
  197. * @len: the maximum length to read, set to the length actually read.
  198. * @cb: function to call once it's done.
  199. * @arg: @cb argument
  200. *
  201. * This creates a plan to read data into a buffer. Once any data is
  202. * read, @len is updated and the @cb function will be called: on an
  203. * error, the finish function is called instead.
  204. *
  205. * Note that the I/O may actually be done immediately.
  206. *
  207. * Example:
  208. * struct buf {
  209. * size_t len;
  210. * char buf[12];
  211. * };
  212. *
  213. * static struct io_plan dump_and_close(struct io_conn *conn, struct buf *b)
  214. * {
  215. * printf("Partial read: '%*s'\n", (int)b->len, b->buf);
  216. * free(b);
  217. * return io_close();
  218. * }
  219. *
  220. * static void start_conn_with_part_read(int fd, void *unused)
  221. * {
  222. * struct buf *b = malloc(sizeof(*b));
  223. *
  224. * // Read message, then dump and close.
  225. * b->len = sizeof(b->buf);
  226. * io_new_conn(fd, io_read_partial(b->buf, &b->len, dump_and_close, b));
  227. * }
  228. */
  229. #define io_read_partial(data, len, cb, arg) \
  230. io_debug(io_read_partial_((data), (len), \
  231. typesafe_cb_preargs(struct io_plan, void *, \
  232. (cb), (arg), \
  233. struct io_conn *), \
  234. (arg)))
  235. struct io_plan io_read_partial_(void *data, size_t *len,
  236. struct io_plan (*cb)(struct io_conn *, void *),
  237. void *arg);
  238. /**
  239. * io_write_partial - plan to write some data.
  240. * @data: the data buffer.
  241. * @len: the maximum length to write, set to the length actually written.
  242. * @cb: function to call once it's done.
  243. * @arg: @cb argument
  244. *
  245. * This creates a plan to write data from a buffer. Once any data is
  246. * written, @len is updated and the @cb function will be called: on an
  247. * error, the finish function is called instead.
  248. *
  249. * Note that the I/O may actually be done immediately.
  250. *
  251. * Example:
  252. * struct buf {
  253. * size_t len;
  254. * char buf[12];
  255. * };
  256. *
  257. * static struct io_plan show_remainder(struct io_conn *conn, struct buf *b)
  258. * {
  259. * printf("Only wrote: '%*s'\n", (int)b->len, b->buf);
  260. * free(b);
  261. * return io_close();
  262. * }
  263. *
  264. * static void start_conn_with_part_read(int fd, void *unused)
  265. * {
  266. * struct buf *b = malloc(sizeof(*b));
  267. *
  268. * // Write message, then dump and close.
  269. * b->len = sizeof(b->buf);
  270. * strcpy(b->buf, "Hello world");
  271. * io_new_conn(fd, io_write_partial(b->buf, &b->len, show_remainder, b));
  272. * }
  273. */
  274. #define io_write_partial(data, len, cb, arg) \
  275. io_debug(io_write_partial_((data), (len), \
  276. typesafe_cb_preargs(struct io_plan, void *, \
  277. (cb), (arg), \
  278. struct io_conn *), \
  279. (arg)))
  280. struct io_plan io_write_partial_(const void *data, size_t *len,
  281. struct io_plan (*cb)(struct io_conn *, void*),
  282. void *arg);
  283. /**
  284. * io_connect - plan to connect to a listening socket.
  285. * @fd: file descriptor.
  286. * @addr: where to connect.
  287. * @cb: function to call once it's done.
  288. * @arg: @cb argument
  289. *
  290. * This initiates a connection, and creates a plan for
  291. * (asynchronously). completing it. Once complete, @len is updated
  292. * and the @cb function will be called: on an error, the finish
  293. * function is called instead.
  294. *
  295. * Note that the connect may actually be done immediately.
  296. *
  297. * Example:
  298. * #include <sys/types.h>
  299. * #include <sys/socket.h>
  300. * #include <netdb.h>
  301. *
  302. * // Write, then close socket.
  303. * static struct io_plan start_write(struct io_conn *conn, void *unused)
  304. * {
  305. * return io_write("hello", 5, io_close_cb, NULL);
  306. * }
  307. *
  308. * ...
  309. *
  310. * int fd;
  311. * struct addrinfo *addrinfo;
  312. *
  313. * fd = socket(AF_INET, SOCK_STREAM, 0);
  314. * getaddrinfo("localhost", "8111", NULL, &addrinfo);
  315. * io_new_conn(fd, io_connect(fd, addrinfo, start_write, NULL));
  316. */
  317. struct addrinfo;
  318. #define io_connect(fd, addr, cb, arg) \
  319. io_debug(io_connect_((fd), (addr), \
  320. typesafe_cb_preargs(struct io_plan, void *, \
  321. (cb), (arg), \
  322. struct io_conn *), \
  323. (arg)))
  324. struct io_plan io_connect_(int fd, const struct addrinfo *addr,
  325. struct io_plan (*cb)(struct io_conn *, void*),
  326. void *arg);
  327. /**
  328. * io_idle - plan to do nothing.
  329. *
  330. * This indicates the connection is idle: io_wake() will be called later do
  331. * give the connection a new plan.
  332. *
  333. * Example:
  334. * struct io_conn *sleeper;
  335. * sleeper = io_new_conn(open("/dev/null", O_RDONLY), io_idle());
  336. * if (!sleeper)
  337. * exit(1);
  338. */
  339. #define io_idle() io_debug(io_idle_())
  340. struct io_plan io_idle_(void);
  341. /**
  342. * io_timeout - set timeout function if the callback doesn't complete.
  343. * @conn: the current connection.
  344. * @ts: how long until the timeout should be called.
  345. * @cb: callback to call.
  346. * @arg: argument to @cb.
  347. *
  348. * If the usual next callback is not called for this connection before @ts,
  349. * this function will be called. If next callback is called, the timeout
  350. * is automatically removed.
  351. *
  352. * Returns false on allocation failure. A connection can only have one
  353. * timeout.
  354. *
  355. * Example:
  356. * static struct io_plan close_on_timeout(struct io_conn *conn, char *msg)
  357. * {
  358. * printf("%s\n", msg);
  359. * return io_close();
  360. * }
  361. *
  362. * ...
  363. * io_timeout(sleeper, time_from_msec(100),
  364. * close_on_timeout, (char *)"Bye!");
  365. */
  366. #define io_timeout(conn, ts, fn, arg) \
  367. io_timeout_((conn), (ts), \
  368. typesafe_cb_preargs(struct io_plan, void *, \
  369. (fn), (arg), \
  370. struct io_conn *), \
  371. (arg))
  372. bool io_timeout_(struct io_conn *conn, struct timespec ts,
  373. struct io_plan (*fn)(struct io_conn *, void *), void *arg);
  374. /**
  375. * io_duplex - split an fd into two connections.
  376. * @conn: a connection.
  377. * @plan: the first I/O function to call.
  378. *
  379. * Sometimes you want to be able to simultaneously read and write on a
  380. * single fd, but io forces a linear call sequence. The solution is
  381. * to have two connections for the same fd, and use one for read
  382. * operations and one for write.
  383. *
  384. * You must io_close() both of them to close the fd.
  385. *
  386. * Example:
  387. * static void setup_read_write(int fd,
  388. * char greet_in[5], const char greet_out[5])
  389. * {
  390. * struct io_conn *writer, *reader;
  391. *
  392. * // Read their greeting and send ours at the same time.
  393. * writer = io_new_conn(fd,
  394. * io_write(greet_out, 5, io_close_cb, NULL));
  395. * reader = io_duplex(writer,
  396. * io_read(greet_in, 5, io_close_cb, NULL));
  397. * if (!reader || !writer)
  398. * exit(1);
  399. * }
  400. */
  401. #define io_duplex(conn, plan) \
  402. (io_plan_no_debug(), io_duplex_((conn), (plan)))
  403. struct io_conn *io_duplex_(struct io_conn *conn, struct io_plan plan);
  404. /**
  405. * io_wake - wake up an idle connection.
  406. * @conn: an idle connection.
  407. * @plan: the next I/O plan for @conn.
  408. *
  409. * This makes @conn ready to do I/O the next time around the io_loop().
  410. *
  411. * Example:
  412. * struct io_conn *sleeper;
  413. * sleeper = io_new_conn(open("/dev/null", O_RDONLY), io_idle());
  414. *
  415. * io_wake(sleeper, io_write("junk", 4, io_close_cb, NULL));
  416. */
  417. #define io_wake(conn, plan) (io_plan_no_debug(), io_wake_((conn), (plan)))
  418. void io_wake_(struct io_conn *conn, struct io_plan plan);
  419. /**
  420. * io_is_idle - is a connection idle?
  421. *
  422. * This can be useful for complex protocols, eg. where you want a connection
  423. * to send something, so you queue it and wake it if it's idle.
  424. *
  425. * Example:
  426. * struct io_conn *sleeper;
  427. * sleeper = io_new_conn(open("/dev/null", O_RDONLY), io_idle());
  428. *
  429. * assert(io_is_idle(sleeper));
  430. * io_wake(sleeper, io_write("junk", 4, io_close_cb, NULL));
  431. */
  432. bool io_is_idle(const struct io_conn *conn);
  433. /**
  434. * io_break - return from io_loop()
  435. * @ret: non-NULL value to return from io_loop().
  436. * @plan: I/O to perform on return (if any)
  437. *
  438. * This breaks out of the io_loop. As soon as the current @next
  439. * function returns, any io_closed()'d connections will have their
  440. * finish callbacks called, then io_loop() with return with @ret.
  441. *
  442. * If io_loop() is called again, then @plan will be carried out.
  443. *
  444. * Example:
  445. * static struct io_plan fail_on_timeout(struct io_conn *conn, char *msg)
  446. * {
  447. * return io_break(msg, io_close());
  448. * }
  449. */
  450. #define io_break(ret, plan) (io_plan_no_debug(), io_break_((ret), (plan)))
  451. struct io_plan io_break_(void *ret, struct io_plan plan);
  452. /* FIXME: io_recvfrom/io_sendto */
  453. /**
  454. * io_close - plan to close a connection.
  455. *
  456. * On return to io_loop, the connection will be closed.
  457. *
  458. * Example:
  459. * static struct io_plan close_on_timeout(struct io_conn *conn, const char *msg)
  460. * {
  461. * printf("closing: %s\n", msg);
  462. * return io_close();
  463. * }
  464. */
  465. #define io_close() io_debug(io_close_())
  466. struct io_plan io_close_(void);
  467. /**
  468. * io_close_cb - helper callback to close a connection.
  469. * @conn: the connection.
  470. *
  471. * This schedules a connection to be closed; designed to be used as
  472. * a callback function.
  473. *
  474. * Example:
  475. * #define close_on_timeout io_close_cb
  476. */
  477. struct io_plan io_close_cb(struct io_conn *, void *unused);
  478. /**
  479. * io_close_other - close different connection next time around the I/O loop.
  480. * @conn: the connection to close.
  481. *
  482. * This is used to force a different connection to close: no more I/O will
  483. * happen on @conn, even if it's pending.
  484. *
  485. * It's a bug to use this on the current connection!
  486. *
  487. * Example:
  488. * static void stop_connection(struct io_conn *conn)
  489. * {
  490. * printf("forcing stop on connection\n");
  491. * io_close_other(conn);
  492. * }
  493. */
  494. void io_close_other(struct io_conn *conn);
  495. /**
  496. * io_loop - process fds until all closed on io_break.
  497. *
  498. * This is the core loop; it exits with the io_break() arg, or NULL if
  499. * all connections and listeners are closed.
  500. *
  501. * Example:
  502. * io_loop();
  503. */
  504. void *io_loop(void);
  505. /**
  506. * io_conn_fd - get the fd from a connection.
  507. * @conn: the connection.
  508. *
  509. * Sometimes useful, eg for getsockname().
  510. */
  511. int io_conn_fd(const struct io_conn *conn);
  512. /**
  513. * io_set_alloc - set alloc/realloc/free function for io to use.
  514. * @allocfn: allocator function
  515. * @reallocfn: reallocator function, ptr may be NULL, size never 0.
  516. * @freefn: free function
  517. *
  518. * By default io uses malloc/realloc/free, and returns NULL if they fail.
  519. * You can set your own variants here.
  520. */
  521. void io_set_alloc(void *(*allocfn)(size_t size),
  522. void *(*reallocfn)(void *ptr, size_t size),
  523. void (*freefn)(void *ptr));
  524. #endif /* CCAN_IO_H */