Commit 645fd020 authored by Seblu's avatar Seblu
Browse files

Amelioration de la gestion des signaux

parent 34d49daf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3,5 +3,6 @@ remove static magic MAX_LINE_SIZE in sscanf
Print start date and stop date in log file
effacer les scripts avant de quitter
Ajout une fonction qui delete un script
ajouter la commande ping/pong

BUG:
+10 −2
Original line number Diff line number Diff line
@@ -102,7 +102,7 @@ void SLDaemon::run() {
  catch (const Error &e) {
    if (e.code() != ERR_NET)
      throw;
    if (verbose())
    if (verbose()) // TODO: Print the time at lost
      logerr << "Connexion lost. Retrying in " << options.retrydelay << " seconds.\n";
    fclose(socket_fs_);
    socket_fs_ = 0;
@@ -159,6 +159,7 @@ void SLDaemon::disconnect() {
    return;
  if (fclose(socket_fs_))
    throw Error(ERR_NET, strerror(errno));
  // TODO: print close time
  if (verbose())
    logout << "Connection closed.\n";
  socket_fs_ = 0;
@@ -275,7 +276,8 @@ void SLDaemon::auth() {
//******************************************************************************

void SLDaemon::cmd_exit() {
  sendln("Bye.");
  //TODO: print date
  sendln("EXIT: ");
  disconnect();
  exit(ERR_OK);
}
@@ -697,3 +699,9 @@ void sigchild(int) {
    }
  }
}

void sigint(int i) {
  logerr << "Signal " << i << " catched.\n";
  SLDaemon::Instance().disconnect();
  exit(ERR_SIGNAL);
}
+1 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ public:
  // friends functions

  friend void sigchild(int);
  friend void sigint(int);

protected:

+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ bool Logger::file(const string &filename) {
    logfile_.close();

  // open
  logfile_.open(filename.c_str());
  logfile_.open(filename.c_str(), std::fstream::app);
  return logfile_.is_open();
}

+37 −5
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include "sld.hh"

static Options get_default_options();
static bool register_signals();

/*!
** Program entry point
@@ -52,11 +53,9 @@ int main(int argc, char *argv[])
    logerr.file(daemon.options.logfile);
  }

  // register sigchild handler
  if (signal(SIGCHLD, sigchild) == SIG_ERR) {
    logerr << "sld: error: " << strerror(errno) << ".\n";
    return ERR_UNKNOWN;
  }

  if (!register_signals())
    return ERR_SIGNAL;

  // Switch in daemon mode
  if (daemon.options.daemon == 1)
@@ -92,6 +91,39 @@ int main(int argc, char *argv[])
  return ERR_UNKNOWN;
}

/*!
** Register signals
**
** @return success status
*/
static bool register_signals() {
  // register sigchild handler
  if (signal(SIGCHLD, sigchild) == SIG_ERR) {
    logerr << "sld: error: " << strerror(errno) << ".\n";
    return false;
  }

  // register sigint handler
  if (signal(SIGINT, sigint) == SIG_ERR) {
    logerr << "sld: error: " << strerror(errno) << ".\n";
    return false;
  }

  // register sigkill handler
  if (signal(SIGTERM, sigint) == SIG_ERR) {
    logerr << "sld: error: " << strerror(errno) << ".\n";
    return false;
  }

  // register sigkill handler
  if (signal(SIGHUP, sigint) == SIG_ERR) {
    logerr << "sld: error: " << strerror(errno) << ".\n";
    return false;
  }

  return true;
}

/*!
** Set default options
**
Loading