diff options
author | Nick Mathewson <nickm@torproject.org> | 2012-07-26 10:49:06 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2012-07-26 10:49:06 -0400 |
commit | 737f113a328cdf9fe5f718163882f0225052bed4 (patch) | |
tree | 571c342d6559a5a73d31d03251d2d3ffa41e18c8 /listener.c | |
parent | 6a81b1f5a423aa5ec237c085c94bdc0a6cfd9e5d (diff) | |
download | libevent-737f113a328cdf9fe5f718163882f0225052bed4.tar.gz |
Extract common error-handling code in evconnlistener_new_bind
Diffstat (limited to 'listener.c')
-rw-r--r-- | listener.c | 34 |
1 files changed, 14 insertions, 20 deletions
@@ -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 |