summaryrefslogtreecommitdiff
path: root/listener.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2012-07-26 10:49:06 -0400
committerNick Mathewson <nickm@torproject.org>2012-07-26 10:49:06 -0400
commit737f113a328cdf9fe5f718163882f0225052bed4 (patch)
tree571c342d6559a5a73d31d03251d2d3ffa41e18c8 /listener.c
parent6a81b1f5a423aa5ec237c085c94bdc0a6cfd9e5d (diff)
downloadlibevent-737f113a328cdf9fe5f718163882f0225052bed4.tar.gz
Extract common error-handling code in evconnlistener_new_bind
Diffstat (limited to 'listener.c')
-rw-r--r--listener.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/listener.c b/listener.c
index 276eb06e..a549b385 100644
--- a/listener.c
+++ b/listener.c
@@ -227,38 +227,32 @@ evconnlistener_new_bind(struct event_base *base, evconnlistener_cb cb,
if (fd == -1)
return NULL;
- if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&on, sizeof(on))<0) {
- evutil_closesocket(fd);
- return NULL;
- }
+ if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&on, sizeof(on))<0)
+ goto err;
+
if (flags & LEV_OPT_REUSEABLE) {
- if (evutil_make_listen_socket_reuseable(fd) < 0) {
- evutil_closesocket(fd);
- return NULL;
- }
+ if (evutil_make_listen_socket_reuseable(fd) < 0)
+ goto err;
}
if (flags & LEV_OPT_DEFERRED_ACCEPT) {
- if (evutil_make_tcp_listen_socket_deferred(fd) < 0) {
- evutil_closesocket(fd);
- return NULL;
- }
+ if (evutil_make_tcp_listen_socket_deferred(fd) < 0)
+ goto err;
}
if (sa) {
- if (bind(fd, sa, socklen)<0) {
- evutil_closesocket(fd);
- return NULL;
- }
+ if (bind(fd, sa, socklen)<0)
+ goto err;
}
listener = evconnlistener_new(base, cb, ptr, flags, backlog, fd);
- if (!listener) {
- evutil_closesocket(fd);
- return NULL;
- }
+ if (!listener)
+ goto err;
return listener;
+err:
+ evutil_closesocket(fd);
+ return NULL;
}
void