summaryrefslogtreecommitdiff
path: root/listener.c
diff options
context:
space:
mode:
authorJardel Weyrich <jweyrich@gmail.com>2009-12-30 19:09:14 -0200
committerNick Mathewson <nickm@torproject.org>2010-01-08 23:27:26 -0500
commit4367a33a205c64df92e604aa3c4b01ac40aa821d (patch)
treec8deb58f0ef1c60fc1165f84442eb1c88c6ca0b3 /listener.c
parent2f33e00af3e617d4a1fbb22de37f7c382de6961b (diff)
downloadlibevent-4367a33a205c64df92e604aa3c4b01ac40aa821d.tar.gz
Fixed a fd leak in start_accepting(), plus cosmetic changes
Diffstat (limited to 'listener.c')
-rw-r--r--listener.c36
1 files changed, 15 insertions, 21 deletions
diff --git a/listener.c b/listener.c
index fee82193..b044d9b7 100644
--- a/listener.c
+++ b/listener.c
@@ -350,45 +350,39 @@ static int
start_accepting(struct accepting_socket *as)
{
/* requires lock */
- int result = -1;
- const struct win32_extension_fns *ext =
- event_get_win32_extension_fns();
- SOCKET s = socket(as->family, SOCK_STREAM, 0);
+ const struct win32_extension_fns *ext = event_get_win32_extension_fns();
DWORD pending = 0;
+ SOCKET s = socket(as->family, SOCK_STREAM, 0);
if (s == INVALID_SOCKET)
return -1;
- setsockopt(s,
- SOL_SOCKET,
- SO_UPDATE_ACCEPT_CONTEXT,
- (char *)&as->lev->fd,
- sizeof(&as->lev->fd));
+ setsockopt(s, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT,
+ (char *)&as->lev->fd, sizeof(&as->lev->fd));
if (!(as->lev->base.flags & LEV_OPT_LEAVE_SOCKETS_BLOCKING))
evutil_make_socket_nonblocking(s);
- if (event_iocp_port_associate(as->lev->port, s, 1) < 0)
- goto done;
+ if (event_iocp_port_associate(as->lev->port, s, 1) < 0) {
+ closesocket(s);
+ return -1;
+ }
as->s = s;
if (ext->AcceptEx(as->lev->fd, s, as->addrbuf, 0,
- as->buflen/2, as->buflen/2,
- &pending, &as->overlapped.overlapped)) {
+ as->buflen/2, as->buflen/2, &pending, &as->overlapped.overlapped))
+ {
/* Immediate success! */
accepted_socket_cb(&as->overlapped, 1, 0, 1);
- result = 0;
} else {
int err = WSAGetLastError();
- if (err == ERROR_IO_PENDING)
- result = 0;
- else
- event_warnx("AcceptEx: %s",
- evutil_socket_error_to_string(err));
+ if (err != ERROR_IO_PENDING) {
+ event_warnx("AcceptEx: %s", evutil_socket_error_to_string(err));
+ return -1;
+ }
}
-done:
- return result;
+ return 0;
}
static void