Socket: BUGFIX: Move incorrect v-function call out of FileBody destructor
[senf.git] / Socket / SocketProtocol.cc
index f82cd5f..ca28664 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 //
-// Copyright (C) 2006 
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-//     Stefan Bund <stefan.bund@fokus.fraunhofer.de>
+// Copyright (C) 2006
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+//     Stefan Bund <g0dil@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
 // Free Software Foundation, Inc.,
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
-// Definition of non-inline non-template functions
+/** \file
+    \brief SocketProtocol and ConcreteSocketProtocol non-inline non-template implementation
+ */
 
+#include <sys/socket.h>
 #include "SocketProtocol.hh"
 //#include "SocketProtocol.ih"
 
 #define prefix_
 ///////////////////////////////cc.p////////////////////////////////////////
 
-prefix_ void satcom::lib::SocketProtocol::state(SocketStateMap & map, unsigned lod)
+prefix_ void senf::SocketProtocol::close()
+    const
+{
+    if (::shutdown(body().fd(),SHUT_RDWR) < 0)
+        throwErrno();
+    if (::close(body().fd()) < 0)
+        throwErrno();
+}
+
+prefix_ void senf::SocketProtocol::terminate()
+    const
+{
+    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(body().fd(),SOL_SOCKET,SO_LINGER,&ling,sizeof(ling));
+    ::shutdown(body().fd(),SHUT_RDWR);
+    ::close(body().fd());
+}
+
+prefix_ void senf::SocketProtocol::state(SocketStateMap & map, unsigned lod)
     const
 {}
 
@@ -42,5 +69,10 @@ prefix_ void satcom::lib::SocketProtocol::state(SocketStateMap & map, unsigned l
 \f
 // Local Variables:
 // mode: c++
-// c-file-style: "satcom"
+// fill-column: 100
+// c-file-style: "senf"
+// indent-tabs-mode: nil
+// ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// comment-column: 40
 // End: