Skip to content

Commit 439904e

Browse files
committed
Add signal handler
1 parent 4d6590e commit 439904e

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

examples/mqtt-server/main.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ struct sub {
2020
};
2121
static struct sub *s_subs = NULL;
2222

23+
// Handle interrupts, like Ctrl-C
24+
static int s_signo;
25+
static void signal_handler(int signo) {
26+
s_signo = signo;
27+
}
28+
2329
// Event handler function
2430
static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
2531
if (ev == MG_EV_MQTT_CMD) {
@@ -88,10 +94,13 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
8894
}
8995

9096
int main(void) {
91-
struct mg_mgr mgr; // Event manager
92-
mg_mgr_init(&mgr); // Initialise event manager
93-
mg_mqtt_listen(&mgr, s_listen_on, fn, NULL); // Create MQTT listener
94-
for (;;) mg_mgr_poll(&mgr, 1000); // Infinite event loop
95-
mg_mgr_free(&mgr);
97+
struct mg_mgr mgr; // Event manager
98+
signal(SIGINT, signal_handler); // Setup signal handlers - exist event
99+
signal(SIGTERM, signal_handler); // manager loop on SIGINT and SIGTERM
100+
mg_mgr_init(&mgr); // Initialise event manager
101+
LOG(LL_INFO, ("Starting on %s", s_listen_on)); // Inform that we're starting
102+
mg_mqtt_listen(&mgr, s_listen_on, fn, NULL); // Create MQTT listener
103+
while (s_signo == 0) mg_mgr_poll(&mgr, 1000); // Event loop, 1s timeout
104+
mg_mgr_free(&mgr); // Cleanup
96105
return 0;
97106
}

0 commit comments

Comments
 (0)