/*! \brief Event loop listening for signals and remote commands. */ static void event_loop(server_t *server) { uint8_t buf[KNOT_WIRE_MAX_PKTSIZE]; size_t buflen = sizeof(buf); /* Read control socket configuration. */ conf_val_t listen_val = conf_get(conf(), C_CTL, C_LISTEN); conf_val_t rundir_val = conf_get(conf(), C_SRV, C_RUNDIR); char *rundir = conf_abs_path(&rundir_val, NULL); struct sockaddr_storage addr = conf_addr(&listen_val, rundir); free(rundir); /* Bind to control interface (error logging is inside the function. */ int remote = remote_bind(&addr); sigset_t empty; (void)sigemptyset(&empty); /* Run event loop. */ for (;;) { int ret = remote_poll(remote, &empty); /* Events. */ if (ret > 0) { ret = remote_process(server, &addr, remote, buf, buflen); if (ret == KNOT_CTL_STOP) { break; } } /* Interrupts. */ if (sig_req_stop) { break; } if (sig_req_reload) { sig_req_reload = false; server_reload(server, conf()->filename); } } server_stop(server); /* Close remote control interface. */ remote_unbind(&addr, remote); /* Wait for server to finish. */ server_wait(server); }
void do_console() { char buf[1024]; while(1) { scanf( "%s", buf ); if( strcmp( buf, "quit" ) == 0 ){ break; }else if( strcmp( buf, "stop" ) == 0 ){ server_stop( websrv ); }else if( strcmp( buf, "start" ) == 0 ){ server_start( websrv ); }else if( strcmp( buf, "clear" ) == 0 ){ server_clear( websrv ); }else if( strcmp( buf, "reload" ) == 0 ){ server_reload( websrv ); }else if( strcmp( buf, "print" ) == 0 ){ server_print( websrv ); memory_print(); }else{ SLEEP(3); //Temperory fixed for linux nohup! } } }