face: Implementing close operation and many related fixes in TcpFace and TcpChannel

Change-Id: Ib6b751e80454e149bf94f3867663d5e705cbf4a0
refs: #1250, #1248
diff --git a/daemon/mgmt/internal-face.cpp b/daemon/mgmt/internal-face.cpp
index 7af328f..32c03a1 100644
--- a/daemon/mgmt/internal-face.cpp
+++ b/daemon/mgmt/internal-face.cpp
@@ -90,10 +90,16 @@
 void
 InternalFace::sendData(const Data& data)
 {
-
 }
 
 void
+InternalFace::close()
+{
+  throw Error("Internal face cannot be closed");
+}
+
+
+void
 InternalFace::setInterestFilter(const Name& filter,
                                 OnInterest onInterest)
 {
diff --git a/daemon/mgmt/internal-face.hpp b/daemon/mgmt/internal-face.hpp
index 9539a9e..8d5805c 100644
--- a/daemon/mgmt/internal-face.hpp
+++ b/daemon/mgmt/internal-face.hpp
@@ -15,6 +15,13 @@
 class InternalFace : public Face, public AppFace
 {
 public:
+  /**
+   * \brief InternalFace-related error
+   */
+  struct Error : public Face::Error
+  {
+    Error(const std::string& what) : Face::Error(what) {}
+  };
 
   InternalFace();
 
@@ -26,6 +33,9 @@
   virtual void
   sendData(const Data& data);
 
+  virtual void
+  close();
+
   // Methods implementing AppFace interface. Do not invoke from forwarder.
 
   virtual void