Skip to content

Commit 045eef4

Browse files
committed
Unit tests for listener error callbacks
1 parent c4be8d8 commit 045eef4

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

listener.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ accepted_socket_cb(struct event_overlapped *o, ev_uintptr_t key, ev_ssize_t n, i
472472
/* Some error on accept that we couldn't actually handle. */
473473
event_sock_warn(as->s, "Unexpected error on AcceptEx");
474474
LeaveCriticalSection(&as->lock);
475-
/* XXXX recover better. */
475+
/* XXXX send error to user */
476476
}
477477
}
478478

test/regress_listener.c

+43
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,51 @@ regress_pick_a_port(void *arg)
133133
evconnlistener_free(listener2);
134134
}
135135

136+
static void
137+
errorcb(struct evconnlistener *lis, void *data_)
138+
{
139+
int *data = data_;
140+
*data = 1000;
141+
evconnlistener_disable(lis);
142+
}
143+
144+
static void
145+
regress_listener_error(void *arg)
146+
{
147+
struct basic_test_data *data = arg;
148+
struct event_base *base = data->base;
149+
struct evconnlistener *listener = NULL;
150+
int count = 1;
151+
152+
/* send, so that pair[0] will look 'readable'*/
153+
send(data->pair[1], "hello", 5, 0);
154+
155+
/* Start a listener with a bogus socket. */
156+
listener = evconnlistener_new(base, acceptcb, &count,
157+
LEV_OPT_CLOSE_ON_FREE|LEV_OPT_REUSEABLE, 0,
158+
data->pair[0]);
159+
tt_assert(listener);
160+
161+
evconnlistener_set_error_cb(listener, errorcb);
162+
163+
tt_assert(listener);
164+
165+
event_base_dispatch(base);
166+
tt_int_op(count,==,1000); /* set by error cb */
167+
168+
end:
169+
evconnlistener_free(listener);
170+
}
136171

137172
struct testcase_t listener_testcases[] = {
138173

139174
{ "randport", regress_pick_a_port, TT_FORK|TT_NEED_BASE,
140175
&basic_setup, NULL},
141176

177+
{ "error", regress_listener_error,
178+
TT_FORK|TT_NEED_BASE|TT_NEED_SOCKETPAIR,
179+
&basic_setup, NULL},
180+
142181
END_OF_TESTCASES,
143182
};
144183

@@ -147,5 +186,9 @@ struct testcase_t listener_iocp_testcases[] = {
147186
TT_FORK|TT_NEED_BASE|TT_ENABLE_IOCP,
148187
&basic_setup, NULL},
149188

189+
{ "error", regress_listener_error,
190+
TT_FORK|TT_NEED_BASE|TT_NEED_SOCKETPAIR|TT_ENABLE_IOCP,
191+
&basic_setup, NULL},
192+
150193
END_OF_TESTCASES,
151194
};

0 commit comments

Comments
 (0)