Merged revisions 570-575,577-578 via svnmerge from
[senf.git] / Socket / SocketHandle.cc
index 4d0b8fc..64735f2 100644 (file)
@@ -30,7 +30,7 @@
 // Custom includes
 #include <sstream>
 #include <sys/socket.h>
-#include "Utils/TypeInfo.hh"
+#include "../Utils/TypeInfo.hh"
 
 //#include "SocketHandle.mpp"
 #define prefix_
 
 prefix_ void senf::SocketBody::v_close()
 {
-    if (::shutdown(fd(),SHUT_RDWR) < 0)
-        throw SystemException(errno);
-    if (::close(fd()) < 0)
-        throw SystemException(errno);
+    protocol().close();
 }
 
 prefix_ void senf::SocketBody::v_terminate()
 {
-    struct linger ling;
-    ling.l_onoff = 0;
-    ling.l_linger = 0;
-
-    // We purposely IGNORE any errors: this method is used to try and
-    // terminate the connection ignoring any possible problems
-
-    ::setsockopt(fd(),SOL_SOCKET,SO_LINGER,&ling,sizeof(ling));
-    ::shutdown(fd(),SHUT_RDWR);
-    ::close(fd());
+    protocol().terminate();
 }
 
 prefix_ bool senf::SocketBody::v_eof()
@@ -66,11 +54,11 @@ prefix_ bool senf::SocketBody::v_eof()
 
 prefix_ void senf::SocketBody::state(SocketStateMap & map, unsigned lod)
 {
-    map["file.handle"] = fd();
-    map["file.refcount"] = refcount();
-    map["socket.server"] = isServer();
-    map["socket.protocol"] = prettyName(typeid(protocol()));
-    map["socket.policy"] = prettyName(typeid(protocol().policy()));
+    map["file.handle"]     << fd();
+    map["file.refcount"]   << refcount();
+    map["socket.server"]   << isServer();
+    map["socket.protocol"] << prettyName(typeid(protocol()));
+    map["socket.policy"]   << prettyName(typeid(protocol().policy()));
     protocol().state(map,lod);
 }