diff --git a/lib/libev.c b/lib/libev.c
index eff7197f34ad2fe8979e95968f4a954bd42858b1..8cda4483ce6c3d14a468e5af1083fc1a0b3f31e0 100644
--- a/lib/libev.c
+++ b/lib/libev.c
@@ -57,6 +57,21 @@ libwebsocket_sigint_cb(struct ev_loop *loop,
 	ev_break(loop, EVBREAK_ALL);
 }
 
+LWS_VISIBLE int libwebsocket_sigint_cfg(
+	struct libwebsocket_context *context,
+	int use_ev_sigint,
+	lws_ev_signal_cb* cb)
+{
+	context->use_ev_sigint = use_ev_sigint;
+	if( cb ) {
+		context->lws_ev_sigint_cb = cb;
+	}
+	else {
+		context->lws_ev_sigint_cb = &libwebsocket_sigint_cb;
+	};
+	return 0;
+};
+
 LWS_VISIBLE int
 libwebsocket_initloop(
 	struct libwebsocket_context *context,
@@ -80,8 +95,12 @@ libwebsocket_initloop(
 	ev_io_init(w_accept, libwebsocket_accept_cb,
 					context->listen_service_fd, EV_READ);
 	ev_io_start(context->io_loop,w_accept);
-	ev_signal_init(w_sigint, libwebsocket_sigint_cb, SIGINT);
-	ev_signal_start(context->io_loop,w_sigint);
+
+	/* Register the signal watcher unless the user has indicated otherwise: */
+	if( context->use_ev_sigint ) {
+		ev_signal_init(w_sigint, context->lws_ev_sigint_cb, SIGINT);
+		ev_signal_start(context->io_loop,w_sigint);
+	};
 	backend = ev_backend(loop);
 
 	switch (backend) {
diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h
index c621029d480c2e1656b7d27879d97307e6df6a22..608cb491f42fddf8f961df6416733ed56444aa9d 100644
--- a/lib/libwebsockets.h
+++ b/lib/libwebsockets.h
@@ -1143,6 +1143,14 @@ lws_add_http_header_status(struct libwebsocket_context *context,
 LWS_EXTERN int lws_http_transaction_completed(struct libwebsocket *wsi);
 
 #ifdef LWS_USE_LIBEV
+typedef void (lws_ev_signal_cb)(EV_P_ struct ev_signal *w, int revents);
+
+LWS_VISIBLE LWS_EXTERN int
+libwebsocket_sigint_cfg(
+	struct libwebsocket_context *context,
+	int use_ev_sigint,
+	lws_ev_signal_cb* cb);
+
 LWS_VISIBLE LWS_EXTERN int
 libwebsocket_initloop(
 	struct libwebsocket_context *context, struct ev_loop *loop);
diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h
index ec08013527a173a3e206e24f42aa3bc70d35e38e..c9c69968c063f789bd12c6c8b5507c6fab758745 100644
--- a/lib/private-libwebsockets.h
+++ b/lib/private-libwebsockets.h
@@ -438,6 +438,8 @@ struct libwebsocket_context {
 	struct ev_loop* io_loop;
 	struct lws_io_watcher w_accept;
 	struct lws_signal_watcher w_sigint;
+	lws_ev_signal_cb* lws_ev_sigint_cb;
+	int use_ev_sigint;
 #endif /* LWS_USE_LIBEV */
 	int max_fds;
 	int listen_port;