@@ -20,6 +20,12 @@ struct sub {
2020};
2121static 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
2430static 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
9096int 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