/**
* io_new_listener - create a new accepting listener.
* @fd: the file descriptor.
- * @start: the first function to call on new connections.
- * @finish: the function to call when the connection is closed or fails.
- * @arg: the argument to both @start and @finish.
+ * @init: the function to call for a new connection
+ * @arg: the argument to @init.
*
- * When @fd becomes readable, we accept() and turn that fd into a new
- * connection.
+ * When @fd becomes readable, we accept() and pass that fd to init().
*
* Returns NULL on error (and sets errno).
*/
-#define io_new_listener(fd, start, finish, arg) \
+#define io_new_listener(fd, init, arg) \
io_new_listener_((fd), \
- typesafe_cb_preargs(struct io_plan, void *, \
- (start), (arg), \
- struct io_conn *), \
- typesafe_cb_preargs(void, void *, (finish), \
- (arg), struct io_conn *), \
+ typesafe_cb_preargs(void, void *, \
+ (init), (arg), \
+ int fd), \
(arg))
struct io_listener *io_new_listener_(int fd,
- struct io_plan (*start)(struct io_conn *,
- void *arg),
- void (*finish)(struct io_conn *,
- void *arg),
+ void (*init)(int fd, void *arg),
void *arg);
/**
/**
* io_write - queue data to be written.
- * @conn: the current connection.
* @data: the data buffer.
* @len: the length to write.
* @cb: function to call once it's done.
*
* Note that the I/O may actually be done immediately.
*/
-#define io_write(conn, data, len, cb, arg) \
- io_write_((conn), (data), (len), \
+#define io_write(data, len, cb, arg) \
+ io_write_((data), (len), \
typesafe_cb_preargs(struct io_plan, void *, \
(cb), (arg), struct io_conn *), \
(arg))
-struct io_plan io_write_(struct io_conn *conn, const void *data, size_t len,
+struct io_plan io_write_(const void *data, size_t len,
struct io_plan (*cb)(struct io_conn *, void *),
void *arg);
/**
* io_read - queue buffer to be read.
- * @conn: the current connection.
* @data: the data buffer.
* @len: the length to read.
* @cb: function to call once it's done.
*
* Note that the I/O may actually be done immediately.
*/
-#define io_read(conn, data, len, cb, arg) \
- io_read_((conn), (data), (len), \
+#define io_read(data, len, cb, arg) \
+ io_read_((data), (len), \
typesafe_cb_preargs(struct io_plan, void *, \
(cb), (arg), struct io_conn *), \
(arg))
-struct io_plan io_read_(struct io_conn *conn, void *data, size_t len,
+struct io_plan io_read_(void *data, size_t len,
struct io_plan (*cb)(struct io_conn *, void *),
void *arg);
/**
* io_read_partial - queue buffer to be read (partial OK).
- * @conn: the current connection.
* @data: the data buffer.
* @len: the maximum length to read, set to the length actually read.
* @cb: function to call once it's done.
*
* Note that the I/O may actually be done immediately.
*/
-#define io_read_partial(conn, data, len, cb, arg) \
- io_read_partial_((conn), (data), (len), \
+#define io_read_partial(data, len, cb, arg) \
+ io_read_partial_((data), (len), \
typesafe_cb_preargs(struct io_plan, void *, \
(cb), (arg), struct io_conn *), \
(arg))
-struct io_plan io_read_partial_(struct io_conn *conn, void *data, size_t *len,
+struct io_plan io_read_partial_(void *data, size_t *len,
struct io_plan (*cb)(struct io_conn *, void *),
void *arg);
/**
* io_write_partial - queue data to be written (partial OK).
- * @conn: the current connection.
* @data: the data buffer.
* @len: the maximum length to write, set to the length actually written.
* @cb: function to call once it's done.
*
* Note that the I/O may actually be done immediately.
*/
-#define io_write_partial(conn, data, len, cb, arg) \
- io_write_partial_((conn), (data), (len), \
+#define io_write_partial(data, len, cb, arg) \
+ io_write_partial_((data), (len), \
typesafe_cb_preargs(struct io_plan, void *, \
(cb), (arg), struct io_conn *), \
(arg))
-struct io_plan io_write_partial_(struct io_conn *conn,
- const void *data, size_t *len,
+struct io_plan io_write_partial_(const void *data, size_t *len,
struct io_plan (*cb)(struct io_conn *, void*),
void *arg);
/**
* io_idle - explicitly note that this connection will do nothing.
- * @conn: the current connection.
*
* This indicates the connection is idle: some other function will
* later call io_read/io_write etc. (or io_close) on it, in which case
* it will do that.
*/
-struct io_plan io_idle(struct io_conn *conn);
+struct io_plan io_idle(void);
/**
* io_timeout - set timeout function if the callback doesn't fire.
/**
* io_break - return from io_loop()
- * @conn: the current connection.
* @ret: non-NULL value to return from io_loop().
* @cb: function to call once on return
* @arg: @cb argument
*
* If io_loop() is called again, then @cb will be called.
*/
-#define io_break(conn, ret, fn, arg) \
- io_break_((conn), (ret), \
+#define io_break(ret, fn, arg) \
+ io_break_((ret), \
typesafe_cb_preargs(struct io_plan, void *, \
(fn), (arg), struct io_conn *), \
(arg))
-struct io_plan io_break_(struct io_conn *conn, void *ret,
+struct io_plan io_break_(void *ret,
struct io_plan (*fn)(struct io_conn *, void *),
void *arg);