X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fio%2Fio.h;h=a93c6ed49941580efc4741ca58687b062d63c472;hp=510ee0be0166033618768b91cbcafcec8541c85b;hb=580457bd3e4af60d5367412589d2aa1bb0289eed;hpb=0fa318d0eeccbb4d33310f048653fa212c12d86d diff --git a/ccan/io/io.h b/ccan/io/io.h index 510ee0be..a93c6ed4 100644 --- a/ccan/io/io.h +++ b/ccan/io/io.h @@ -722,6 +722,35 @@ bool io_plan_out_started(const struct io_conn *conn); */ bool io_flush_sync(struct io_conn *conn); +/** + * io_conn_exclusive - set/unset an io_conn to exclusively serviced + * @conn: the connection + * @exclusive: whether to be exclusive or not + * + * If any io_conn is set exclusive, then no non-exclusive io_conn (or + * io_listener) will be serviced by io_loop(). If it's a io_duplex io_conn(), + * then io_conn_exclusive() makes the read-side exclusive; io_conn_out_exclusive() + * makes the write-side exclusive. + * + * This allows you to temporarily service only one (or several) fds. + * For example, you might want to flush out one io_conn and not + * receive any new connections or read any otherninput. + * + * Returns true of there any exclusive io_conn remain, otherwise false. + * (This is useful for checking your own logic: dangling exclusive io_conn + * are dangerous!). + */ +bool io_conn_exclusive(struct io_conn *conn, bool exclusive); + +/** + * io_conn_out_exclusive - set/unset exclusive on the write-side of a duplex + * @conn: the connection, post io_duplex + * @exclusive: whether to be exclusive or not + * + * See io_conn_exclusive() above. + */ +bool io_conn_out_exclusive(struct io_conn *conn, bool exclusive); + /** * io_fd_block - helper to set an fd blocking/nonblocking. * @fd: the file descriptor