From: Rusty Russell Date: Mon, 21 Oct 2013 05:33:58 +0000 (+1030) Subject: io: add io_conn_fd() X-Git-Url: http://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=8700faf27fe4cf9554fec2260bdabd67eabf69ae;ds=sidebyside io: add io_conn_fd() Useful for getsockname(). Signed-off-by: Rusty Russell --- diff --git a/ccan/io/io.c b/ccan/io/io.c index e2dd4443..f45589c0 100644 --- a/ccan/io/io.c +++ b/ccan/io/io.c @@ -472,6 +472,11 @@ struct io_plan io_break_(void *ret, struct io_plan plan) return plan; } +int io_conn_fd(const struct io_conn *conn) +{ + return conn->fd.fd; +} + void io_set_alloc(void *(*allocfn)(size_t size), void *(*reallocfn)(void *ptr, size_t size), void (*freefn)(void *ptr)) diff --git a/ccan/io/io.h b/ccan/io/io.h index 067a69c1..6248fec0 100644 --- a/ccan/io/io.h +++ b/ccan/io/io.h @@ -491,6 +491,14 @@ struct io_plan io_close_cb(struct io_conn *, void *unused); */ void *io_loop(void); +/** + * io_conn_fd - get the fd from a connection. + * @conn: the connection. + * + * Sometimes useful, eg for getsockname(). + */ +int io_conn_fd(const struct io_conn *conn); + /** * io_set_alloc - set alloc/realloc/free function for io to use. * @allocfn: allocator function diff --git a/ccan/io/test/run-01-start-finish.c b/ccan/io/test/run-01-start-finish.c index a63baf77..d8a24a52 100644 --- a/ccan/io/test/run-01-start-finish.c +++ b/ccan/io/test/run-01-start-finish.c @@ -9,10 +9,12 @@ #ifndef PORT #define PORT "65001" #endif +static int expected_fd; static void finish_ok(struct io_conn *conn, int *state) { ok1(*state == 1); + ok1(io_conn_fd(conn) == expected_fd); (*state)++; io_break(state + 1, io_idle()); } @@ -21,6 +23,7 @@ static void init_conn(int fd, int *state) { ok1(*state == 0); (*state)++; + expected_fd = fd; io_set_finish(io_new_conn(fd, io_close()), finish_ok, state); } @@ -64,7 +67,7 @@ int main(void) int fd; /* This is how many tests you plan to run */ - plan_tests(9); + plan_tests(10); fd = make_listen_fd(PORT, &addrinfo); ok1(fd >= 0); l = io_new_listener(fd, init_conn, &state);