Esempio n. 1
0
/*! \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);
}
Esempio n. 2
0
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!
		}
	}
}