Add signal handling, improve robustness for sequence number file writes.

Also removes now unused Fib::Clean method.

Change-Id: I7db2d66fa329920467ea7d5e7c16ff5a2ee9f44b
diff --git a/src/nlsr.cpp b/src/nlsr.cpp
index 144f1d3..4d52fa0 100644
--- a/src/nlsr.cpp
+++ b/src/nlsr.cpp
@@ -78,6 +78,7 @@
       m_lsdb)
   , m_statsCollector(m_lsdb, m_helloProtocol)
   , m_faceMonitor(m_face)
+  , m_terminateSignals(face.getIoContext(), SIGINT, SIGTERM)
 {
   NLSR_LOG_DEBUG("Initializing Nlsr");
 
@@ -107,6 +108,10 @@
       neighbor.setLinkCost(0);
     }
   }
+
+  m_terminateSignals.async_wait([this] (auto&&... args) {
+    terminate(std::forward<decltype(args)>(args)...);
+  });
 }
 
 void
@@ -365,4 +370,13 @@
     });
 }
 
+void
+Nlsr::terminate(const boost::system::error_code& error, int signalNo)
+{
+  if (error)
+    return;
+  NLSR_LOG_INFO("Caught signal " << signalNo << " (" << ::strsignal(signalNo) << "), exiting...");
+  m_face.getIoContext().stop();
+}
+
 } // namespace nlsr