diff --git a/include/event2/listener.h b/include/event2/listener.h index fa4e9499..dbc0366f 100644 --- a/include/event2/listener.h +++ b/include/event2/listener.h @@ -112,6 +112,11 @@ struct event_base *evconnlistener_get_base(struct evconnlistener *lev); /** Return the socket that an evconnlistner is listening on. */ evutil_socket_t evconnlistener_get_fd(struct evconnlistener *lev); +/** Set ss to the address that an evconnlistner is listening on; returns 0 + * on success, -1 on failure. */ +int evconnlistener_get_address(struct evconnlistener *lev, + struct sockaddr *sa, ev_socklen_t *socklen); + #ifdef __cplusplus } #endif diff --git a/listener.c b/listener.c index edfdaefc..dbd9c83c 100644 --- a/listener.c +++ b/listener.c @@ -261,6 +261,16 @@ event_listener_getfd(struct evconnlistener *lev) return event_get_fd(&lev_e->listener); } +int +evconnlistener_get_address(struct evconnlistener *lev, + struct sockaddr *sa, ev_socklen_t *socklen) +{ + evutil_socket_t s = evconnlistener_get_fd(lev); + if (s <= 0) + return -1; + return getsockname(s, sa, socklen); +} + struct event_base * evconnlistener_get_base(struct evconnlistener *lev) {